如何解决==相等性检查运算符的工作功能是否在内部使用哈希码方法?
// Program snippet
String fullName = "AlexAeva";
System.out.println("fullName hc " +fullName.hashCode());
String firstName = "Alex";
System.out.println("firstName hc " + firstName.hashCode());
String lastName = "Aeva";
System.out.println("lastName hc " + lastName.hashCode());
firstName += lastName;
System.out.println("firstName hc " + firstName.hashCode());
// hash code of first name and fullname is same
// But equality operator is giving false.
// DO == use hashcode for identification internally
System.out.println(" == check " + (firstName == fullName));
结果:-
fullName hc 1684075821
firstname hc 2043454
lastName hc 2037231
firstname hc 1684075821
==检查为假
解决方法
很好的观察
但是,重要的是要了解哈希码和.equals之间的区别。
Hashcode只是对象的哈希值。对于定义平等(或更确切地说,证明不平等)很有用。
.equals()会根据对象的相等性定义,告诉您对象A是否被认为等于对象。哈希码可以定义一个方面的平等性。
==告诉您ObjectA是否从字面上指向并引用与ObjectB相同的数据。基本上,它们是同一个对象。
举一个更好的例子,我们假设您和我都有一盒10个三明治。哈希码将是我们俩将我们的行李放在单独的秤上,然后看看它们的重量是否相同。 .equals()将打开包装袋,以查看它们是否具有相同类型的三明治(降至任意任意详细程度)。 ==可以让我们看到我们是否都拿着同一个袋子。
考虑一下:
public class SOQ_20200913_2
{
public SOQ_20200913_2()
{
// Program snippet
String fullName = "AlexAeva";
System.out.println("fullName hc " +fullName.hashCode());
String firstName = "Alex";
System.out.println("firstName hc " + firstName.hashCode());
String lastName = "Aeva";
System.out.println("lastName hc " + lastName.hashCode());
firstName += lastName;
System.out.println("firstName hc " + firstName.hashCode());
// hash code of first name and fullname is same
// But equality operator is giving false.
// DO == use hashcode for identification internally
System.out.println(" hash check " + (firstName.hashCode() == fullName.hashCode()));
System.out.println(".equals check " + (firstName.equals(fullName)));
System.out.println(" == check " + (firstName == fullName));
}
public static void main(String[] args)
{
SOQ_20200913_2 soq = new SOQ_20200913_2();
}
}
,
不。 ==
比较对象与引用相等性。也就是说,当且仅当两个对象在字面上相同时,它们才相等。如果要通过哈希码进行比较,则需要显式调用hashCode
。如果您想要一个至少在某种程度上合理并同意hashCode
的相等比较,则可以使用equals
方法。
==,hashcode(),equals()
equals()和==用于比较2个对象。这是两者之间的一些区别。 ==运算符用于地址比较,.equals()方法用于内容比较。
等于方法,用于检查两个对象是否包含相同的数据。
Ex代码:
public static void main(String[] args) {
String s1=new String("Kamal");
String s2=new String("Kamal");
String s3=new String("Pasindu");
System.out.println(s1==s2); //false
System.out.println(s1.equals(s2)); //true
System.out.println(s1.equals(s3)); //false
}
在hashcode()方法中,它返回对象的哈希码值。
- 如果根据equals()方法两个对象相等,则它们的哈希码必须相同。
public static void main(String [] args){
String s1 = new String("Kamal");
String s2 = new String("Kamal");
String s3 = new String("Pasindu");
System.out.println(s1 == s2); //false
System.out.println(s1.equals(s2)); //true
System.out.println(s1.equals(s3)); //false
System.out.println(s1.hashCode() == s2.hashCode()); //true
System.out.println(s1.hashCode() == s3.hashCode()); //false
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。