草庐IT

java - 为什么覆盖等于而不是使用另一个方法名称

这似乎是一个愚蠢的问题,但为什么我们要重写equals方法而不是创建一个具有新名称的新方法并使用它进行比较?如果我没有覆盖equals这意味着==和equals检查两个引用是否都指向相同的内存位置? 最佳答案 Thisseemslikeasillyquestionbutwhydoweoverrideequalsmethodinsteadofcreatinganewmethodwithnewnameandcompareusingit?因为所有标准集合(ArrayList、LinkedList、HashSet、HashMap、...)都

java - 为什么在添加到 HashSet 和 hashCode 匹配时不调用 equals()?

当我运行此代码时,为什么只调用hashCode()而不是equals方法,而我的hashCode()实现生成相同的HashSet的两个条目的hashCode?importjava.util.HashSet;publicclassTest1{publicstaticvoidmain(String[]args){Studentst=newStudent(89);HashSetst1=newHashSet();st1.add(st);st1.add(st);System.out.println("Hosize="+st1.size());}}classStudent{privateintna

java - 为什么在添加到 HashSet 和 hashCode 匹配时不调用 equals()?

当我运行此代码时,为什么只调用hashCode()而不是equals方法,而我的hashCode()实现生成相同的HashSet的两个条目的hashCode?importjava.util.HashSet;publicclassTest1{publicstaticvoidmain(String[]args){Studentst=newStudent(89);HashSetst1=newHashSet();st1.add(st);st1.add(st);System.out.println("Hosize="+st1.size());}}classStudent{privateintna

java - 为什么两个 AtomicInteger 永远不相等?

我偶然发现了AtomicInteger的来源并意识到newAtomicInteger(0).equals(newAtomicInteger(0))评估为false。这是为什么?它是与并发问题相关的一些“防御性”设计选择吗?如果是这样,如果采用不同的实现方式会出现什么问题?(我确实意识到我可以使用get和==代替。) 最佳答案 这部分是因为AtomicInteger不是Integer的通用替代品。java.util.concurrent.atomicpackagesummary状态:Atomicclassesarenotgeneral

java - 为什么两个 AtomicInteger 永远不相等?

我偶然发现了AtomicInteger的来源并意识到newAtomicInteger(0).equals(newAtomicInteger(0))评估为false。这是为什么?它是与并发问题相关的一些“防御性”设计选择吗?如果是这样,如果采用不同的实现方式会出现什么问题?(我确实意识到我可以使用get和==代替。) 最佳答案 这部分是因为AtomicInteger不是Integer的通用替代品。java.util.concurrent.atomicpackagesummary状态:Atomicclassesarenotgeneral

java - 带有 String 的 Java 7 switch 语句是否使用 equals() 方法?

Java7支持使用Strings进行切换,如下面的代码switch(month.toLowerCase()){case"january":monthNumber=1;break;case"february":monthNumber=2;break;default:monthNumber=0;break;}Java是否在每个String案例上调用equals()方法?或者它依赖于==或intern()?这是否等同于:Stringmonth=month.toLowerCase();if("january".equals(month)){monthNumber=1;}elseif("febr

java - 带有 String 的 Java 7 switch 语句是否使用 equals() 方法?

Java7支持使用Strings进行切换,如下面的代码switch(month.toLowerCase()){case"january":monthNumber=1;break;case"february":monthNumber=2;break;default:monthNumber=0;break;}Java是否在每个String案例上调用equals()方法?或者它依赖于==或intern()?这是否等同于:Stringmonth=month.toLowerCase();if("january".equals(month)){monthNumber=1;}elseif("febr

java - 为什么指定 BigDecimal.equals 来分别比较值和比例?

这不是关于如何比较两个BigDecimal对象的问题-我知道您可以使用compareTo而不是equals来做到这一点,因为equals被记录为:UnlikecompareTo,thismethodconsiderstwoBigDecimalobjectsequalonlyiftheyareequalinvalueandscale(thus2.0isnotequalto2.00whencomparedbythismethod).问题是:为什么要以这种看似违反直觉的方式指定equals?也就是说,为什么能够区分2.0和2.00是重要?这似乎是有原因的,因为指定compareTo方法的Co

java - 为什么指定 BigDecimal.equals 来分别比较值和比例?

这不是关于如何比较两个BigDecimal对象的问题-我知道您可以使用compareTo而不是equals来做到这一点,因为equals被记录为:UnlikecompareTo,thismethodconsiderstwoBigDecimalobjectsequalonlyiftheyareequalinvalueandscale(thus2.0isnotequalto2.00whencomparedbythismethod).问题是:为什么要以这种看似违反直觉的方式指定equals?也就是说,为什么能够区分2.0和2.00是重要?这似乎是有原因的,因为指定compareTo方法的Co

java - 在Java中为具有循环引用的对象实现equals和hashCode

我定义了两个类,它们都包含对另一个对象的引用。它们看起来与此类似(这是简化的;在我的真实域模型中,A包含一个B列表,每个B都有一个对父A的引用):publicclassA{publicBb;publicStringbKey;@OverridepublicinthashCode(){finalintprime=31;intresult=1;result=prime*result+((b==null)?0:b.hashCode());result=prime*result+((bKey==null)?0:bKey.hashCode());returnresult;}@Overridepub