private static final String MESSAGE = "taobao";
public static void main(String[] args) {
String a = "taobao";
String b = "tao";
String c = "bao";
System.out.println(a == MESSAGE);
System.out.println((b+c) == MESSAGE);//为什么这个是false?
}
true
false
为什么 这两个不同呢。。
在做字符串的连接的时候往往是开辟一个新内存空间,
把bc的值复制过去连接,
所以b+c的地址跟a的地址是不一样的,
而给a赋值的时候,
内存中已经有一个区域是taobao了,
所以就直接引用过去了。另,如果后文对a的值进行修改,
过程也是先新分配空间在把a的指向改过去,
而不是在a所指向的原有空间中进行直接修改
如果 用 的是 equals 比 的就是 值 这就相同了