Java每日笔试题错题分析(4)
- 一、错题知识点前瞻
- 第1题
- 第2题
- 第3题
- 第4题
- 第5题
- 二、错题展示及其解析
- 第1题
- 第2题
- 第3题
- 第4题
- 第5题
一、错题知识点前瞻
第1题
String声明变量在jvm中的存储方法
1,字符串在java中存储在字符串常量区中 2,判断的是对象引用是否是同一个引用,判断字符串相等要用equals方法 首先判断a==MESSAGE 同一份字符串常量在内存中只有一份,因此是同一地址,返回true 再次比较(b+c)==MESSAGE 这相当于 new String(b+c)==MESSAGE 这里new了一个String对象,所以返回false
第2题
原理:
强制类型转换优先级大于+ -*/
第3题
原理:
+号两边一边有字符串类型则是字符串连接
第4题
常量池与堆
第5题
原理:
Integer赋值问题
其实当我们在为Integer赋值的时候,java编译器会将其翻译成调用valueOf()方法。比如Integer i=127翻译为Integer i=Integer.valueOf(127) ,对于-128到127之间的数,Java会对其进行缓存。而超出这个范围则新建一个对象。 i1和i2为128,超出范围,所以都需要新建对象,对象比较为false; i5和i6为100,在范围之内,在执行Integer i5=100时,就会直接缓存到内存中,但执行执行Integer i6=100时,就直接从缓存里取,而不需要新建对象,所以为true。
二、错题展示及其解析
第1题
原理:
String声明变量在jvm中的存储方法
1,字符串在java中存储在字符串常量区中 2,判断的是对象引用是否是同一个引用,判断字符串相等要用equals方法 首先判断a==MESSAGE 同一份字符串常量在内存中只有一份,因此是同一地址,返回true 再次比较(b+c)==MESSAGE 这相当于 new String(b+c)==MESSAGE 这里new了一个String对象,所以返回false
扩展:
String f=b+c;
System.out.println(f==MESSAGE); //返回false
String a1="taob"+"ao";
System.out.println(a1==MESSAGE); //返回true
第2题
原理:
强制类型转换优先级大于+ -*/
第3题
原理:
+号两边一边有字符串类型则是字符串连接
解析:
x+y+z 中,先是x+y为"72"为字符串类型,再"72"+z="772"为字符串类型
而y+z+x中,先是y+z=4为整形数据,再4+x="47"为字符串数据
第4题
原理:
a与b在常量池,cd在堆
解析
==比较引用,equals比较值,因为a,b都在常量池,因此他们是同一个引用,而c,d在堆中,他们也是同一个引用
第5题
原理:
Integer赋值问题
其实当我们在为Integer赋值的时候,java编译器会将其翻译成调用valueOf()方法。比如Integer i=127翻译为Integer i=Integer.valueOf(127) ,对于-128到127之间的数,Java会对其进行缓存。而超出这个范围则新建一个对象。 i1和i2为128,超出范围,所以都需要新建对象,对象比较为false; i5和i6为100,在范围之内,在执行Integer i5=100时,就会直接缓存到内存中,但执行执行Integer i6=100时,就直接从缓存里取,而不需要新建对象,所以为true。