Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较java字符串与==_Java_String_Operator Overloading_Equals - Fatal编程技术网

比较java字符串与==

比较java字符串与==,java,string,operator-overloading,equals,Java,String,Operator Overloading,Equals,可能重复: 是否可以使用==运算符比较Java字符串 为什么我经常看到,用equals方法代替 这是因为当使用==与Hello这样的文本字符串进行比较时,并不意味着调用equals吗?java中没有自定义运算符重载。[因此不能通过重载调用equals] equals确保检查两个对象是否相同,而==检查这是否是完全相同的对象。[因此不,使用==不会调用equals] ==检查两个对象是否引用了一个对象的同一实例,而equals则检查两个对象是否实际等效,即使它们不是同一实例 不,这是不可能的,因

可能重复:

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

为什么我经常看到,用equals方法代替

这是因为当使用==与Hello这样的文本字符串进行比较时,并不意味着调用equals吗?

java中没有自定义运算符重载。[因此不能通过重载调用equals]


equals确保检查两个对象是否相同,而==检查这是否是完全相同的对象。[因此不,使用==不会调用equals]

==检查两个对象是否引用了一个对象的同一实例,而equals则检查两个对象是否实际等效,即使它们不是同一实例

不,这是不可能的,因为与==比较对象引用,而不是需要使用equals的字符串内容。

要扩展@amit的答案,==运算符应仅用于值类型int、double等。字符串是引用类型,因此应与.equals方法进行比较。对引用类型使用==运算符可检查java中的引用相等性,这意味着两个对象引用都指向同一内存位置。

字符串是一个类。因此,如果试图将字符串与其包含字符串值的对象进行比较,则在查找对象时不能使用==。要比较对象的内容,请必须对字符串对象引用使用等于运算符==比较,而string.equals方法检查两个对象引用+对象值。此外,String.equals方法inturn在其实现中使用==运算符。

据我所知,'=='运算符用于检查to对象是否相同。
可推测的比较字符串可能具有相同的char等值nr,但实际上是两个完全不同的对象,因此比较结果为假。

在Java中,不能重载运算符。==运算符不执行标识相等。平等者。。。另一方面,可以重写方法来进行特定于类型的比较

下面是要演示的代码片段:

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
一个复杂的问题是与平等有关。。。您也需要关心null。因此,正确的空安全习惯用法是:

(a == null ? b == null : a.equals(b))

这是一个循环,您不必在假设C中跳过,正如amit已经说过的,==检查是否是相同的对象,而equals检查相同的内容好的,基本实现等于==但字符串覆盖了它

注:

除此之外,原语的对象包装也是如此,例如

 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


equals应该用于所有不是原语的东西。主要部分的类。

==运算符检查对象的位模式,而不是这些对象的内容,但equals函数比较对象的内容

String str1=new String("abc");
String str2=new String("abc");
System.out.printlnstr1==str2;将返回false,因为str1和str2是使用new创建的不同对象。
System.out.printlnstr1.equalsstr2将返回true,因为equals检查对象的内容。

请注意,有时两个不同的字符串变量的==可能会成功,这是因为intern方法导致它们都引用了同一个实际对象的内存。如果使用google java字符串比较,你会发现很多清晰的解释,包括这个网站上的一些。看看这个问题,没有自定义操作符重载。Java语言重载了一些运算符+可以表示数字加法或字符串串联,|可以表示按位或逻辑非快捷方式或。@Joachim:同意,我认为OP对自定义运算符重载感兴趣,所以我没有明确提到它。谢谢你的评论。我编辑了我的答案。-1:1L是一个原语long,1L.equals1L是无效的Java语法对原语类型的方法调用没有装箱[好的,如果我达到125信誉,我会投票否决它:P]@pmnt你是对的,更新了答案。
String str1=new String("abc");
String str2=new String("abc");