先看代码
public class Ttest {
/**
*
* @param args
*/
public static void main(String[] args){
int i1 = 1;
Integer i2 = 1;
Integer i3 = new Integer(1);
Integer i4 = Integer.valueOf(1);
Integer i5 = Integer.valueOf(1);
System.out.println(i1 == i2);
System.out.println(i2 == i3);
System.out.println(i2 == i4);
System.out.println(i3 == i4);
System.out.println(i4 == i5);
String s1 = new String("");
String s2 = "";
String s3 = "";
String s4 = String.valueOf("");
String s5 = String.valueOf("");
System.out.println(s1 == s2);
System.out.println(s1 == s4);
System.out.println(s2 == s3);
System.out.println(s2 == s4);
System.out.println(s4 == s5);
System.out.println(2048&(-2048));
}
}
打印的答案如下:
true(自动拆箱)
false(在堆内存中地址不一样)
true(在堆内存中地址一样)
false(在堆内存中地址不一样)
true(在堆内存中地址一样)
false(s1堆内存,s2常量池)
false(s1堆内存,s4常量池)
true(常量池)
true(常量池)
true(常量池)
2048(-2048 表示为 去掉符号位取反+1 还是2048)