1。我知道 == 会检查两个对象是否指向相同的内存位置,等于的默认定义是否使用 == 进行检查,意味着两者都相同。
2。 字符串类会覆盖equals方法,以检查两个字符串是否具有相同的值。
考虑S1 =“测试”,S2 = S1;
现在S1和S2是两个不同的对象,因此每点1 S1 == S2 应该 false 并且按照点2 S1.equals(S2) )应该是 true 但是当我在eclipse中运行这个小程序时都返回true。对于字符串对象有什么特别之处,S1 == S2也是如此。
答案 0 :(得分:3)
考虑S1 =“测试”,S2 = S1;现在S1和S2是两个不同的对象
不。这是你的论证失败的地方。
您创建了一个字符串对象,并且您的两个变量都引用了相同的字符串对象。分配不制作字符串的新副本。
答案 1 :(得分:3)
写作时
s1 = s2;
s1
和s2
是对同一对象的引用,因此s1 == s2
将始终返回true。
更令人困惑 - 如果你写:
s1 = "test";
s2 = "test";
s3 = new String("test");
您会发现s1 == s2
为真,但s1 == s3
为假。更详细地解释了这一点in this post。
答案 2 :(得分:2)
Wiritng S1 = S2导致他们指向同一个对象
书写
String S1 = "test"
String S2 = "test"
将产生与您现在相同的结果。 这是由于编译器优化,编译器注意到不可变的字符串类,因此他将优化代码以使用相同的实例。您可以通过使用构造函数
来强制他创建新的字符串String s1 = new String("test");
String s2 = new String("test");
System.out.println(s1 == s2) // false
System.out.println(s1.equals(s2)) //true
答案 3 :(得分:1)
初始化时
S2=S1
它们都指向相同的内存位置。
尝试
S1 = "test";
S2 = "test";
这会给你
S1==S2 //false