是否有可能使用==操作符来比较Java字符串?
为什么我经常看到用equals()方法代替?
是因为当与字面字符串(如“你好”)比较使用==并不意味着调用equals()?
是否有可能使用==操作符来比较Java字符串?
为什么我经常看到用equals()方法代替?
是因为当与字面字符串(如“你好”)比较使用==并不意味着调用equals()?
没有定制运营商在java中过载。 [所以不能过载它来调用的equals()]
了equals()确保你检查2个对象是相同的,而==检查这是否是完全相同的对象。 [所以不,使用==不会调用equals()]。
有没有**自定义**运算符重载。 Java语言重载了一些运算符('+'可以表示数字加法或字符串连接,'|'可以表示按位OR或逻辑非快捷键OR)。 –
@Joachim:同意,我认为OP对自定义运算符重载感兴趣,所以我没有明确提及它。感谢您的评论。我编辑了我的答案。 – amit
==
检查两个对象是否引用同一个对象实例,而equals()
检查这两个对象是否实际上等价,即使它们不是相同的实例。
不,这是不可能的,因为==你比较对象引用,而不是字符串(您需要使用等于)的内容。
要在@ Amit的答案扩大,操作符==只应在值类型(int,double等)的字符串是一个引用类型,因此,应与.equals()方法相比,使用。在引用类型检查在Java引用平等使用==操作符(意思是两个对象引用指向同一个内存位置。)
String是一个class.So如果您尝试比较其对象的字符串抱着你不能使用==,因为它是寻找一个object.For比较,你必须使用对象的内容的字符串值等于
==操作符比较字符串对象引用,而String.equals方法检查用于对象引用+对象值。而且,String.equals方法inturn在其实现中使用==运算符。
从我所知道的'=='运算符是用来检查对象是否相同。
可能的比较字符串可能具有相同的值(字符等),但事实上是两个完全不同的对象,因此会导致比较错误。
在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(...)
。所以,正确的空安全的成语是:
(a == null ? b == null : a.equals(b))
这是一个循环,你不必通过跳跃中说C#
正如阿米特已经说过,==检查是相同的对象,而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
==
如果内存地址在两侧都相等,除基本类型外,则返回true。
等于应该用在不是原语的所有东西上。主要部分的类。
==运算符检查对象的位模式而不是这些对象的内容,但等于函数比较对象的内容。
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()会检查对象的内容。
http://stackoverflow.com/questions/767372/java-string-equals-versus – Johan
只要注意,有时==可能成功为两个不同的字符串变量,这是因为实习方法导致他们都参考相同的实际对象的内存。 – Steven
如果你的谷歌“java字符串比较”,你会发现任何数量的明确解释,包括在这个网站上的一些。 – NPE