在这段代码中,==比较在Java中是如何工作的
公共类相等测试{在这段代码中,==比较在Java中是如何工作的,java,comparison,equals,Java,Comparison,Equals,公共类相等测试{ public static void main(String[] args) { String s1 = "abc"; String s2 = s1; String s5 = "abc"; String s3 = new String("abc"); String s4 = new String("abc"); System.out.println("== comparison : " + (s1 == s5)); Sy
public static void main(String[] args) {
String s1 = "abc";
String s2 = s1;
String s5 = "abc";
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println("== comparison : " + (s1 == s5));
System.out.println("== comparison : " + (s1 == s2));
System.out.println("Using equals method : " + s1.equals(s2));
System.out.println("== comparison : " + s3 == s4);
System.out.println("Using equals method : " + s3.equals(s4));
}
}
输出:
== comparison : true
== comparison : true
Using equals method : true
false
Using equals method : true
有人能解释一下s3==s4的输出在上面是如何变为false的,还有这个equals标记操作是如何工作的吗?这个“==”操作符比较内存位置(这两个变量名是否指向同一个实例),而“.equals()”比较值(即使是不同的副本,它们是否共享相同的内容?)如果我没弄错的话,==操作符在s3和s4这样定义时比较对象。由于对象不相同(没有相同的地址或内存位置;通常称为引用),因此运算符给出false。==运算符适用于其他示例,因为您正在比较基元字符串。这是一个原因(至少在我的经验中是这样),即==不是一个好的选择,您应该始终使用.equals,以确保您比较的是字符串而不是对象本身。显然s3和s4与值相等,但与对象无关。因此,
s3==s4
为false,因为它是比较内存位置
您可以了解java中==
和equals()之间的区别
运算符“=
”
在Java中,当使用“==”操作符比较两个对象时,它将
检查对象是否引用内存中的同一位置。在里面
换句话说,它检查这两个对象名是否基本相同
对同一内存位置的引用
equals()方法
相等法
在对象类中定义,从该对象类中,每个类都是
直接或间接后代。默认情况下,equals()方法
实际上,其行为与“==”运算符相同–这意味着它将检查
查看两个对象是否引用内存中的同一位置。但是,
equals方法实际上是用来比较两个对象的内容,
而不是它们在内存中的位置
没有“原始字符串”这样的东西。你当然是对的-我应该更仔细地选择我的措辞。祝贺你在StackOverflow上提出了第一个最常见的问题。当你发布一个非常常见的问题时,它表明你根本没有努力先研究这个主题。自己做一些研究很重要,因为a)你可能会发现你不是世界上第一个想到这个问题的人b)你有更好的机会理解答案。唯一比一次又一次地看到同样的问题更令人沮丧的是,人们提出了他们不希望理解答案的问题。