是否可以使用==运算符比较Java字符串?
为什么我经常看到,使用了equals()方法?
是不是因为在与文字字符串(如“Hello”)比较时使用==并不意味着调用equals()?
答案 0 :(得分:5)
java中没有自定义运算符重载。 [所以你不能超载它来调用equals()]
equals()确保您检查2个对象是否相同,而==检查这是否是完全相同的对象。 [所以不,使用==不会调用equals()]。
答案 1 :(得分:2)
==
检查两个对象是否引用对象的同一个实例,而equals()
检查这两个对象是否实际等效,即使它们不是同一个实例。
答案 2 :(得分:2)
不,这是不可能的,因为使用==你比较对象引用而不是字符串的内容(你需要使用equals)。
答案 3 :(得分:2)
在Java中,您不能重载运算符。 ==
运算符执行标识相同性。另一方面,equals(...)
方法可以被覆盖以进行特定类型的比较。
这是一段代码片段,用于演示:
String a = "abcdef";
String b = a;
String c = new String(a);
println(a == b); // true
println(a.equals(b)); // true
println(a == c); // false
println(a.equals(c)); // true
一个并发症是equals(...)
,你需要关心null。所以正确的零安全习语是:
(a == null ? b == null : a.equals(b))
这是一个你不必在C#
中跳过的循环答案 4 :(得分:1)
要扩展@ amit的答案,==运算符应仅用于值类型(int,double等).String是引用类型,因此应与.equals()方法进行比较。在引用类型上使用==运算符检查java中的引用相等性(意味着两个对象引用都指向相同的内存位置。)
答案 5 :(得分:1)
String是一个类。因此,如果您尝试将String与其持有字符串值的对象进行比较,则无法使用==,因为它正在查找对象。为了比较您必须使用的对象的内容等于
答案 6 :(得分:1)
运算符==比较字符串对象引用,而String.equals方法检查对象引用+对象值。此外,String.equals方法inturn在其实现中使用==运算符。
答案 7 :(得分:1)
据我所知,'=='运算符用于检查对象是否相同
可推测的比较字符串可能具有相同的值(字符等的nr),但实际上是两个完全不同的对象,因此使得比较错误。
答案 8 :(得分:1)
==
返回true,原始类型除外。
equals应该用在非原始的所有东西上。主要部分的课程。
答案 9 :(得分:0)
正如amit已经说过,==检查是否是同一个对象,而equals()
检查相同的内容(好的,基本实现等于==但String
会覆盖此内容)。
注意:
"Hello" == "Hello" //most probably would be true
"Hello".equals( "Hello" ) //will be true
String s1, s2; //initialize with something different than a literal, e.g. loading from a file, both should contain the same string
s1 == s2 //most probably will NOT be true
s1.equals( s2) //will be true, if both contain the same string, e.g. "Hello"
除此之外,对于基元的对象包装器也是如此,例如
Long l1 = 1L;
Long l2 = 1L;
l1 == l2 //will most likely be true for small numbers, since those literals map to cached instances
l1.equals(l2) //will be true
new Long(1) == new Long(1) //will NOT be true
new Long(1).equals(new Long(1)) //will be true
答案 10 :(得分:0)
==运算符检查对象的位模式而不是那些对象的内容,但是equals函数比较对象的内容。
String str1=new String("abc");
String str2=new String("abc");
的System.out.println(STR1 == STR2);将返回false,因为str1和str2是使用“new”创建的不同对象。 System.out.println(str1.equals(str2))将返回true,因为equals()检查对象的内容。