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 比 的就是 值 这就相同了