代码如下,我不明白为什么 一个输出true,一个输出false。
String string1 = "i love you";
String string2 = "i love you";
//输出 true
System.out.println(string1 == string2);
String string3 = new String("i love you");
String string4 = new String("i love you");
//输出 false
System.out.println(string3 == string4);
以下是我的思考过程,麻烦看看我哪里考虑错了。
string1,string2,string3,string4 都应该是引用类型吧,既然是引用类型,双等号的意思就是判断两者的内存地址是否一样。 那么,同样是String类型,为什么 string1 和string2 的内存地址就一样,而string3,string4 的内存地址就不一样呢?
String string1 = "i love you";
String string2 = "i love you";
在栈中分配两个空间,
其名为string1和string2
其值为两个相同的同时指向"i love you"的地址,"i love you"存放在data segment中只有一个。
String string3 = new String("i love you");
String string4 = new String("i love you");
在栈中分配两个空间,
其名为string3和string4
string3指向堆中为new String("i love you");(对象一)
新分配的空间,其值为指向这里的地址
string4指向堆中为new String("i love you")(对象二)
分配的空间;这是另一片空间,其值为指向这里的地址。