【问题标题】:In java String comparison, how == operator and hashcode() methods are behaving differently [duplicate]在 java 字符串比较中,== 运算符和 hashcode() 方法的行为如何不同[重复]
【发布时间】:2020-12-23 08:52:16
【问题描述】:

String类中的hashCode()方法是内存地址的可读格式。

根据以下代码 == 运算符比较内存位置或哈希码。

那么 == 运算符如何返回 false 和 hashCode() 方法如何返回 true。

public class TestStringEquals {
    public static void main(String[] args) {
         String s1="Hello World";
         System.out.println(s1.toUpperCase()==s1.toUpperCase());   //false
         System.out.println(s1.toUpperCase().hashCode()==s1.toUpperCase().hashCode());   //true
    }
}

【问题讨论】:

  • "== 运算符比较内存位置或哈希码" 不,哈希码与内存位置无关。
  • 具有相同哈希码的两个对象不一定必须相等,更不必说它们必须是同一个实例。此外,String 覆盖 hashCode 以根据其内容返回一个哈希值;所以即使Object#hashCode 与与String 无关的内存位置有关。
  • @Slaw,感谢您的即时回复,所以 == 运算符不比较 hashCodes?
  • 没有。 == 检查引用是否相等(即两个对象是否相同 instance)。请注意== 不会转换为equals(尽管Object#equals默认实现== 相同)。
  • 两个不相等的对象可以有相同的哈希码。试试字符串AAAb的hashcode

标签: java string


【解决方案1】:

== 比较内存中两个对象的起始指针。 hascode 就像校验和。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 2013-08-10
  • 2012-10-05
  • 2019-06-11
相关资源
最近更新 更多