微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

==相等性检查运算符的工作功能是否在内部使用哈希码方法?

如何解决==相等性检查运算符的工作功能是否在内部使用哈希码方法?

    // 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()方法中,它返回对象的哈希码值。

  1. 如果根据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 举报,一经查实,本站将立刻删除。