Java每日笔试题错题分析(4)

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题


Java每日笔试题错题分析(4)_第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题


Java每日笔试题错题分析(4)_第2张图片


原理:

强制类型转换优先级大于+ -*/



第3题


Java每日笔试题错题分析(4)_第3张图片


原理:

+号两边一边有字符串类型则是字符串连接


解析
x+y+z 中,先是x+y为"72"为字符串类型,再"72"+z="772"为字符串类型
而y+z+x中,先是y+z=4为整形数据,再4+x="47"为字符串数据



第4题


Java每日笔试题错题分析(4)_第4张图片


原理:

a与b在常量池,cd在堆
Java每日笔试题错题分析(4)_第5张图片

解析
==比较引用,equals比较值,因为a,b都在常量池,因此他们是同一个引用,而c,d在堆中,他们也是同一个引用



第5题


Java每日笔试题错题分析(4)_第6张图片


原理:

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。


你可能感兴趣的:(Java基础,java)