小言_互联网的博客

java常见面试题一

226人阅读  评论(0)


1、JDK和JRE:
JDK:java Development Kit:Java开发工具,提供了java开发的工具和运行环境
JRE:java Runtime Environment:java运行环境,提供了java运行的环境需求
我们在开发中,下载JDK一般就包含了JRE,如果只是运行java的话可以只安装JRE,但是一般情况下,都是安装JDK就可以。下载好JDK,然后配置好环境变量,这是java开发的第一步
2、javax和java两个命令
javax:是将java文件编译成.class结尾的字节码文件
java:执行字节码文件
所以说java是跨平台的语言,可以实现一次编译,多次运行。
3、float f=1.2;;正确嘛?
不正确,对于float来说,需要后面加上f表示float常量,其实我们可以这样理解,1.2一般默认情况下是double型数据,将一个double型数据赋值给float型数据肯定会编译出错,所以修改的方式有两种,第一就是float a=1.2f;
或者float f=(float)1.2,强制类型的转换,说到类型转换,这边有必要记一下,数值范围小的会自动转换为数值范围大的,数值范围大的要转为数值范围小的就必须强制类型转换,如:
double a=3;
int a=(int)3.0;
数值范围从低到高:
byte–>short–>int–>long–>float–>double
4、==和equals()的比较:
对于基本数据类型==就是比较值不是是相同,对于引用类型,比较的就是引用是不是相同,我们来看一段代码:

       String str1="yxc";
       String str2="yxc";
       String str3=new String("yxc");
       System.out.println(str1==str2);//true
       System.out.println(str2==str3);//false
       System.out.println(str1.equals(str3));//true

通过结果我们可以发现,虽然字符串中的内容都是一样的,但是比较起来还是有区别的,对于str1和str2,它们都指向常量池中的同一个值,所以引用时相同的,但是对于str3来说,它开辟了新的对象,那么对象的引用肯定就不一样了,所以返回false.而对于equeal()方法,其实是因为string类中重写了这个方法,比较的是值,所以返回的才会是true
5、使用equals()方法返回true的两个对象,那么他们的hasCode()也相同?
相同:但是反过来说就不一定了,如果两个对象的hasCode相同,那么那么调用的equals()方法的值不一定相同。
6、String类型是基本数据类型吗?
不是,它是引用类型
7、String类可以被继承吗
不可以,因为String类是被final修饰的类,不可以被继承
8、那么final在java中的作用有哪些?
修饰类:不能被继承
修饰方法:不能被重写
修饰变量:必须是常量,不可以改变,而且要有初值。
9、String与其它基本数据类型的相互转换?

        String str="23";
        String str2="123.1";
        //将字符串转换为基本类型,要求字符串中的数据必须是对应数字类型
        int a=Integer.parseInt(str);
        double d=Double.parseDouble(str2);
        System.out.println(a);
        System.out.println(d);
        //将基本数据类型转换为String类型
        //要将什么数据类型转换为String类型就在括号内填入值
        float f=123.456f;
        String str3=String.valueOf(f);
        System.out.println(str3);

10、操作字符串的三个类以及他们之间的区别:

        String str1 = "123";
        StringBuffer str2 = new StringBuffer("123");
        StringBuilder str3=new StringBuilder("123");
        //System.out.println(str2.equals(str3));//false 类都不相同,比较起来肯定不同
        /**
         *  其实三者都是操作字符串的类,String创建的是不可变的量,也就是每一次创建以后它的值是不会发生改变
         *  而我们平时使用的字符串的拼接+,如果使用String来拼接的话,没拼接一次就会产生一个新的对象
         *  这样的效率是很低的,所以才有了后面的两个类,它们两个可以在原来的对象中直接修改,也就是我们说的append方法
         *  后面两者的主要区别是:StringBuffer是线程安全的,StringBuilder是线程不安全的,但是效率会很高
         *  下面我们通过字符串的拼接来查看时间效率
         *  对于后面两者,其实数据量小的是时候两者的速度都差不多,都很快,但是当数据量大的时候可以看出StringBuilder时间会短一点
         *  对于String的话,效率就很低,需要将近一分钟的时间。
         */
        //测试使用String的时间
        //获取当前时间的毫秒数
       long startTime=System.currentTimeMillis();
       for(int i=0;i<100000;i++){
           str1+=i;
       }
       long endTime=System.currentTimeMillis();
       System.out.println("使用String拼接用时"+(endTime-startTime));

       //测试用时StringBuffer的时间
        startTime=System.currentTimeMillis();
        for(int i=0;i<100000;i++){
            str2.append(i);
        }
        endTime=System.currentTimeMillis();
       System.out.println("使用StringBuffer拼接用时"+(endTime-startTime));

       //测试使用StringBuilder的时间
        startTime=System.currentTimeMillis();
        for(int i=0;i<100000;i++){
            str3.append(i);
        }
        endTime=System.currentTimeMillis();
        System.out.println("使用StringBuffer拼接用时"+(endTime-startTime));
    }

11、如果实现字符串的反转:

        //将字符串进行反转
        String str1 = "abcdefg";
        StringBuffer str2 = new StringBuffer("abcd");
        StringBuilder str3 = new StringBuilder("abcd");
        //对于StringBuffer和StringBuilder来说,通过方法reverse()可以直接实现字符串反转
        StringBuffer reverse = str2.reverse();
        StringBuilder reverse1 = str3.reverse();
        System.out.println(reverse);
        System.out.println(reverse1);
        //对于String类的,我们将其转化为StringBuffer类或者StringBuilder类
        //可以通过构造方法直接转为其它两者类型
        StringBuffer str4=new StringBuffer(str1);
        StringBuffer reverse2 = str4.reverse();
        System.out.println(reverse2);
        //顺便再将stringBuffer类型转为String类型
        String s = str4.toString();

12、说说length()方法,length属性,还有size()方法分别用在什么情况下?
length()方法用在String类中,length属性是数组,size()方法是集合中计算长度的

        int[] a=new int[10];
        String str="yxd123";
        List<String> list=new ArrayList<>();
        list.add("詹姆斯");
        list.add("韦德");
        list.add("欧文");
        //三种计算长度的方法如下:
        System.out.println(str.length());
        System.out.println(a.length);
        System.out.println(list.size());

13、Math.round(-10.4);等于多少?

        //这个最后输出的是一个长整型数据
        //long round = Math.round(-10.9);
        //四舍五入对于正数,对于负数的话,也是一样,但是是在数轴上,我们可以自己画一个数轴,在靠近那一边就去哪一边的值
        System.out.println(Math.round(-10.4));  //-10
        System.out.println(Math.round(10.4));   //10
        //大于这个数的最小整数
        System.out.println(Math.ceil(10.9));    //11
        System.out.println(Math.ceil(-10.9));  //-10
        //小于这个数的最大整数
        System.out.println( Math.floor(10.9));  //10
        System.out.println(Math.floor(-10.9)); //-11

14、写出下面代码的执行结果:

        int a1=100;
        Integer a=100;
        Integer b=100;
        int c1=190;
        Integer c=190;
        Integer d=190;
        System.out.println(a1==a);
        System.out.println(c1==c);
        System.out.println(a==b);
        System.out.println(c==d);

答案:
true
true
true
false
对于前面两个因为java中有自动装箱和自动拆箱机制(就是自动将int基本数据类型转为Interger类,将Integer类直接转为int基本数据类型),但是后面两个不是一样的结果呢,我们通过看源码可以发现,如果Integer数据在-128~127之间的话是不会创建新的对象的,所以使用==就是比较值,而超过上面的范围以后,就会创建一个新的Integer对象,这样对象的引用肯定不一样,所以返回的是false,其它的基本数据类型也是同样的。
15、用最有效的方法计算2*8;
2<<3
16、switch是否可以作用在byte上,是否可以作用在long上,是否可以作用在String上
当我们在switch()括号内输入错误时,会给出如下提示
Incompatible types. Found: ‘long’, required: ‘char, byte, short, int, Character, Byte, Short, Integer, String, or an enum’,其中String类型是jdk1,7以后支持的
17、&和&&的区别:

       //&和&&
        System.out.println(4&5);
        //4&5做位运算,首先将它们转为二进制,然后每一位进行与运算,同时为1结果才为1

        //&&短路与运算,理论上会将&&两边的boolean值都计算出来,但是实际上当左侧不满足条件时,就产生了短路现象,后面的是不会进行判断的
        if(1>2&&2>3){
            System.out.println("这句话不会被输出");
        }

18、怎么将GB2312编码的字符串转换为ISO-8859-1编码的字符串?

       String str1="新春";
       String str2=new String(str1.getBytes("GB2312"),"ISO-8859-1");
       System.out.println(str2);

这样打印的话肯定会出现中文乱码的吗,因为默认情况下ISO-8859-1编码是不支持中文的。
19、如何获取当前时间以及以我们希望的格式输出?

 //获取当前的时间
        Date date=new Date();
        //按照自己的方式格式化时间
        SimpleDateFormat DateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = DateFormat.format(date);
        System.out.println(format);

20、如何使用日历类:

//它是一个接口,所以不能直接通过new或得实例
        //下面的cal对象中就包含了现在时间的所有信息。我们可以获取
        Calendar cal=Calendar.getInstance();
        //下面通过Calendar类中的常量属性直接获取年月日 时分秒 还有很多其它属性,比如第几周,这一天是一周的第几天
        System.out.println(cal.get(Calendar.YEAR));
        System.out.println(cal.get(Calendar.MONTH)+1);
        System.out.println(cal.get(Calendar.DAY_OF_MONTH));
        System.out.println(cal.get(Calendar.HOUR_OF_DAY));
        System.out.println(cal.get(Calendar.MINUTE));
        System.out.println(cal.get(Calendar.SECOND));

转载:https://blog.csdn.net/weixin_42142899/article/details/101280012
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场