关于==的问题
class T{
public String n;
}
T t1 = new T();
t1.n = "asd";
T t2 = new T();
t2.n = "asd";
System.out.println(t1.n == t2.n);
System.out.println(t1 == t2);
==如果是判断非基本数据类型的话,String又不是基本数据类型,判断的是地址是否相等,那么t1.n和t2.n的地址为什么会相等,求解答
java对于字符串的操作步骤是:
题目中T1创建的时候字符串常量池中没有,所以新开地址
T2创建的时候,字符串常量池中已经有了,所以把T2.n的地址页也指向和T1.n一样的地址,所以最后相等
比较的是地址。
n相同原因如下:在Java执行时会维护一个String池(pool),对于一些可以共享的字符串对象,会先在String池中查找是否存在相同的String内容(字符相同),如果有就直接返回,不创建新对象,所以n的地址相同
建议作者了解了解一下,java常量池机制