java面试资料整理

喜欢可以收藏,后续会持续更新

2020/4/22

  1. 代码如下
char c ='a';
char b = c+3;

问这个可以通过编译么?

  • 当然不行的,因为c为char类型的,然后可以转换为int但是int不可以转为char。记住一点就行了,小范围可以向大范围转,低精度可以向高精度转,但是大范围向小范围转就会编译报错,但是通过强转可以解决。

2.代码如下

String a ="abc";
String b ="abc";
System.out.println(a==b);
-----------------------------------
String a = new String("abc");
String b = new String("abc");
System.out.println(a==b);

上面两段代码运行结果为true还是为false?

  • 因为String是final修饰的,所以String是有常量池这个概念的,所以a和b指向的是同一块内存。所以返回true。但是第二段代码因为使用了new关键字,会去堆内存中重新开辟一块空间,所以值为false.

3.String为什么要用final修饰。(之前看到过,但是直接过了,因为觉得不可能面到的,直到面的时候被问到一脸懵逼)

  1. String用final修饰可以实现每个字符串得hashcode值得唯一。
  2. String通过final修饰可以实现常量池用来节省堆内存
  3. 可以用于多线程中属于线程安全得

4:泛型擦除(可能你知道泛型擦除,但是你知道为什么要进行泛型擦除么)

  • java和c#都有对泛型进行使用,但是java中得泛型是伪泛型,只有在编译期有效,具体效果也是用来在编译期对集合之类和数据集合进行类型校验。但是要注意得是泛型是在jdk1.5后推广得,这就为了兼容之前得jdk得版本,导致了泛型必须进行擦除。

5:代码如下

Integer a = new Integer(50);
Integer b = new Integer(50);
System.out.println(a==b);
  • 上面结果为true,因为JAVA的Integer有IntegerCache会缓存-128~127之间的对象,上面的new Integer(50)会自动调用Integer的valueOf()方法,通过该方法返回一个Integer对象,所以返回的是同一个对象,自然输出的值也为true。但是注意的是如果new的值超过了IntegerCache缓存范围值就为false了

你可能感兴趣的:(java面试)