题解
Integer integer1 = new Integer(128);
Integer integer2 = new Integer(128);
System.out.print("["+(integer1 == integer2)+",");
String s3 = "100";
String s4 = "1"+new String("00");
System.out.print((s3 == s4)+",");
Character char1 = 'A';
Character char2 = 'A';
System.out.print((char1 == char2)+"]");答案
`[false,false,true]`
解析
当给
Integer integer = 128复制的时候,java编译器调用 Integer 包装类的静态方法返回 new Integer(i);因此等于在堆中new 了一个新的对象,所以integer1 和 integer2在堆中是两个不同的对象。String s3 = "100","100"存放在方法区中的字符串常量池,s3执行字符串常量池中的“100”,String s4 = "1"+new String("00");中,"1"存放在字符串常量池,new String 在堆中new 了一个String对象。
常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
只要其中一个是变量,结果就在堆中。
如果拼接的结果调用intern()方法,返回值就在常量池中

京公网安备 11010502036488号