我在java&中的.equals()
上创建了一个程序。当我在youtube上看到一些在线视频时遇到一些概念上的问题。搜索了这件事,但没有得到适当的解释。所以伙计们帮我做那件事。
感谢。
package Practice;
public class StringManipulation11 {
StringManipulation11(String s) {
}
public static void main(String[] args) {
String s = "Good";
String s1 = "Good";
String s2 = "Morning";
String t = new String("Good");
String t1 = new String("Good");
String t2 = new String("Morning");
StringManipulation11 sm = new StringManipulation11("Good");
StringManipulation11 sm1 = new StringManipulation11("Good");
System.out.println(s.equals(s1));// true because check content
System.out.println(s.equals(s2));// false content not match
System.out.println(t.equals(t1));// true because check content
System.out.println(s.equals(t));// true because check content
System.out.println(sm.equals(sm1));// false, but not getting the reason
// why it is false
/*
* In this case also the content is same but not getting the proper
* conclusion why it is false & it is false then why i am getting true
* in "System.out.println(t.equals(t1))" in this condtion.
*/
System.out.println(s.equals(sm));
}
}
答案 0 :(得分:4)
在这种情况下,内容也相同,但没有得到正确的结论,为什么它是假的&这是错误的,为什么我在这种情况下在
System.out.println(t.equals(t1))
得到真实。
类String
具有equals
(和hashcode
)的实现,它逐个字符地比较两个对象。你的类没有这些方法的实现,所以它使用它继承自Object
的实现,它比较了引用,即它是真的,实例需要是相同的
这是一个重要的区别,让你的头脑,相同的意味着这两个引用指向完全相同的实例。而等于意味着它们相同或具有相同的内容,但您可以自行决定如何比较内容,请参阅this。
答案 1 :(得分:0)
StringManipulation11是扩展对象,如果你没有覆盖equals method
默认方法是
public boolean equals(Object obj) {
return (this == obj);
}
你可以比较String
public boolean equals(Object var1) {
if(this == var1) {
return true;
} else {
if(var1 instanceof String) {
String var2 = (String)var1;
int var3 = this.value.length;
if(var3 == var2.value.length) {
char[] var4 = this.value;
char[] var5 = var2.value;
for(int var6 = 0; var3-- != 0; ++var6) {
if(var4[var6] != var5[var6]) {
return false;
}
}
return true;
}
}
return false;
}
}
答案 2 :(得分:0)
这是String类(Java 8)中equals
方法的定义:
public boolean equals(Object anObject)
Compares this string to the specified object. The result is true if and only
if the argument is not null and is a String object that represents the same
sequence of characters as this object.
这意味着当且仅当两个字符串表示相同的字符序列时,此方法才返回true。
在您的情况下,您已定义了一个新类StringManipulation11
,默认情况下使用equals
类的Object
方法。这就是它的定义:
The equals method for class Object implements the most discriminating
possible equivalence relation on objects; that is, for any non-null
reference values x and y, this method returns true if and only if x and y
refer to the same object (x == y has the value true).
在您的示例中,您定义了两个不同的对象sm
和sm1
。这些变量引用了DIFFERENT对象,这就是equals
方法返回false的原因。
答案 3 :(得分:0)
如果要在自己编写的类中检查与loop(list1, list2, i -> i < Math.min(a.size(), b.size()), (e1, e2) -> {
doStuff(e1);
doStuff(e2);
});
方法的相等性,则必须覆盖Object类的equals()
方法。equals()
的默认实现继承自{{1}当且仅当两个变量指向同一个对象时才返回true。在你的情况下,sm和sm1对象包含相同的信息,但它们是内存中的不同对象。这就是它返回false的原因。