基本类型 && String
题解
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()方法,返回值就在常量池中