草庐IT

Equality

全部标签

java - 为什么 Java 不支持比较器行的相等性比较?

Java提供了使用Comparator定义对象范围外对象比较的方法。现在我的问题是为什么java不允许对equals()和hashcode()做同样的事情。现在每个集合contains()方法都可以轻松地使用这个外部相等提供程序来检查对象是否相等。 最佳答案 Guava有Equivalence类,它几乎可以满足您的要求。您甚至可以将对象包装在Equivalence中,以使用更好的hashCode()equals()实现来装饰对象(例如,如果您想使用具有错误equals()hashCode()作为映射键但无权访问源)这是一个示例:数组

java - java中功能接口(interface)实例的相等性

这个问题在这里已经有了答案:Isthereawaytocomparelambdas?(3个答案)关闭7年前。我不确定如何确定功能接口(interface)的相等性/不变性。我想当我在Java8中使用这种语法糖时可能无法确保相等性,如果您有任何提示,请告诉我。我为我的问题制作了一个简短的代码片段。publicinterfaceElement{voiddoSomething(inta);}并且我尝试以功能方式添加此接口(interface)的实例publicclassFunctionSet{publicvoiddoubleUp(inta){System.out.println(a*2);}

java - 有没有一种方法可以使用 | 一次比较多个(非 boolean 值)事物?或 & 在 Java 中,类似于如何使用 | 捕获多个异常?

这个问题在这里已经有了答案:Isthereasimplerwaytocheckmultiplevaluesagainstonevalueinanif-statement?[duplicate](12个答案)关闭5年前。通常,我必须输入类似的内容if(a==x||b==x){...}但我看到当使用try/catchblock时,你可以这样做:try{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}catch(ClassNotFoundException|InstantiationException|

java - Boolean.TRUE == myBoolean 与 Boolean.TRUE.equals(myBoolean)

在处理Boolean对象时,是否存在使用equals(Boolean)和==会返回不同结果的情况?Boolean.TRUE==myBoolean;Boolean.TRUE.equals(myBoolean);我在这里考虑的不是原始类型,而是boolean对象。 最佳答案 怎么样:System.out.println(newBoolean(true)==newBoolean(true));System.out.println(newBoolean(true)==Boolean.TRUE);(都打印false,对于thesamereas

java - 检查 2 个不同的相等实例(包含示例)

我在下面的代码中使用了==并打印出“等于!”,为什么?谁能解释为什么这两个不同的字符串a和b相等?publicclasstest{publicstaticvoidmain(){Stringa="boy";Stringb="boy";if(a==b){System.out.println("Equals!");}else{System.out.println("Doesnotequal!");}}} 最佳答案 这是由于String实习。Java(JVM)保留一组String文字,用于节省内存。因此,每当您像这样创建一个String时:

java:用==或.equals()比较类:有区别吗?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:DoesJavaguaranteethatObject.getClass()==Object.getClass()?我知道你应该使用equals()一般来说,但有没有办法两个Class对象可以等于equals()但不等于==?编辑:我特别想找出是否存在两个类对象,这样Classcl1=...Classcl2=...cl1.equals(cl2)->truecl1==cl2->false这不似乎包含在可能重复的问题中。(密切相关)也可能不类对象是由someObject.getClass()获得的。--一个可能是

java - 比较 LinkedList.contains() 中的对象

我希望能够让LinkedList.contains()为自定义比较器返回true。假设我有1个LinkedList和2个对象LinkedListmyList=newLinkedList();MyObjecta=newMyObject("HELLO");MyObjectb=newMyObject("HELLO");从技术上讲,两个对象在比较方面是相同的(MyObject实现了Comparable)(a==b)==真但是,当我执行以下操作时,myList不会为myList.contains(b)返回truemyList.add(a)myList.contains(b)//==false我认

java - 在集合中查找重复条目

是否有工具或库可以根据可实现的特定标准在集合中查找重复条目?为了让自己清楚:我想根据特定标准将条目相互比较。所以我认为Predicate仅返回true或false是不够的。我不能使用equals。 最佳答案 这取决于标准的语义:如果您的标准对于给定的类别始终相同,并且内在于基本概念,您应该只实现equals和hashCode并使用一个集合。如果您的标准取决于上下文,org.apache.commons.collections.CollectionUtils.select(java.util.Collection,org.apache

java - operator == 包装类对象的不同行为

任何人都可以向我解释输出中发生了什么。如果==用于比较两个ref。变量它只是检查它的引用是否相同然后它进入ifbody,那到底为什么如果创建静态方法valueOf()和ee==ff不相等(这没问题)如果使用new关键字创建其对象,则aa==bb相等?staticvoidmain(Stringargs[]){Integeraa=Integer.valueOf("12");Integerbb=Integer.valueOf("12");if(aa==bb)System.out.println("aa==bb");if(aa!=bb)System.out.println("aa!=bb");

java - 突出显示在 Eclipse 中何时使用相等运算符 (==) 进行字符串比较

有什么方法可以让Eclipse突出显示使用==运算符来测试字符串相等性?我一直错误地使用它而不是调用.equals()。我真的很想把它变成一个警告,并需要一个@SuppressWarnings注释来删除它,在尚未发生的情况下,我实际上想比较字符串的对象相等性。有什么工具可以帮助我在编辑时改掉这个坏习惯吗? 最佳答案 使用staticanalysis工具,例如FindBugs,PMD,或CheckStyle.每个都有Eclipse插件,以及Ant任务、Maven插件等。其中每一个都有与字符串相等性相关的规则(Findbugsrule、