67,550
社区成员




public static void main(String[] args) {
String a = "hello2";
final String b = "hello";
String d = "hello";
String c = "hello2";
String e = d + String.valueOf(2);
System.out.println(a == c);
System.out.println(a == e);
}
这样的程序编译出来会是什么样子?
常量池:"hello2" "hello" 2
a指向常量"hello2"
b指向常量"hello"(不可改变)
d指向常量"hello"
c指向常量"hello2"
将数字2转换成字符串"2"
新建字符串对象,其值为变量d与字符串"2"的连接
e指向新字符串
检查a与c指向同一地址,返回true
检查a与e指向不同地址,返回false
请注意,字符串是对象,等于号是用来判断对象地址是否相同的,检查字符串内容是否相同用equal
好比你的家门钥匙配了两把,你跟你媳妇一人一把,等于号是问你,你手上这把钥匙和你媳妇的是同一把钥匙(同一个对象)么?