在compile的时候,放东西进常量池。
对于Integer 范围在 -128 - 127
Integer a = 5;
Integer b = 5;
a == b // true, 因为真的是一个地址
Integer a = new Integer(5);
Integer b = new Integer(5);
a == b // false
Integer a = 128;
Integer b = 128;
a == b // false
对于 String, 编译器在编译的时候放进了常量池
String s1 = "qwertyyy"; // 此时放进了常量池
String s2 = "qwertyyy"; // 指向了常量池那个"qwertyyy"
s1 == s2; //true
String s1 = "qwertyyy";
String s2 = new String("qwertyyy"); // 在heap 上new 了一个
s1 == s2; // false
// 例子
String sa = "a";
String sb = "b";
String sab = "a"+"b";
sab == "a"+"b"; true
sab == sa + "b"; false // 编译器不会这么聪明往回看sa是什么
sab == sa + sb; false
网友评论