将java字符串与==进行比较

时间:2011-08-04 11:23:24

标签: java string operator-overloading equals

  

可能重复:
  Java String.equals versus ==

是否可以使用==运算符比较Java字符串?

为什么我经常看到,使用了equals()方法?

是不是因为在与文字字符串(如“Hello”)比较时使用==并不意味着调用equals()?

11 个答案:

答案 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()检查对象的内容。