Tag: 等于

如果equals(null)抛出NullPointerException而不是一个坏主意?

equals null的合同如下: 对于任何非null的引用值x , x.equals(null)应该return false 。 这是相当奇特的,因为如果o1 != null和o2 == null ,那么我们有: o1.equals(o2) // returns false o2.equals(o1) // throws NullPointerException o2.equals(o1) throws NullPointerException是一件好事,因为它提醒我们程序员错误。 然而,如果出于各种原因,我们只是将其切换到o1.equals(o2) ,那么这个错误就不会被o1.equals(o2) 。 所以问题是: 为什么o1.equals(o2)应该return false而不是抛出NullPointerException ? 如果可能的话,我们重写合约,以至于anyObject.equals(null)总是抛出NullPointerException不是一个好主意? 与Comparable 相比之下,这是Comparable合同所说的: 请注意, null不是任何类的实例,即使e.equals(null)返回false , e.compareTo(null)应抛出NullPointerException 。 如果NullPointerException适合于compareTo ,为什么不equals ? 相关问题 Comparable和Comparator关于null的合同 一个纯粹的语义论证 这些是Object.equals(Object obj)文档中的实际单词: 指示其他某个对象是否“等于”这一个。 什么是对象? JLS 4.3.1对象 一个对象是一个类实例或一个数组。 引用值(通常只是引用 )是指向这些对象的指针,还有一个特殊的null引用,它引用没有对象 。 […]

与equals方法相关的Java代码

我正在练习考试,发现一个我不明白的样本问题。 对于下面的代码,find输出是什么: public class Test { private static int count = 0; public boolean equals(Test testje) { System.out.println("count = " + count); return false; } public static void main(String [] args) { Object t1 = new Test(); Object t2 = new Test(); Test t3 = new Test(); Object o1 = new Object(); ++count; t1.equals(t2); ++count; […]

有没有一个Java标准的“无论是否等于”静态方法?

为了节省一些打字和澄清我的代码,是否有以下方法的标准版本? public static boolean bothNullOrEqual(Object x, Object y) { return ( x == null ? y == null : x.equals(y) ); }

为什么1234 =='1234testing'评估为真?

可能重复: php == vs ===运算符 一个简单的答案,我确定的人。 有人能解释为什么这个expression式评估为真? (1234 == '1234 test')

默认的.equals和.hashCode如何为我的类工作?

说我有我自己的class级 public class MyObj { /* … */ } 它有一些属性和方法。 它不实现equals,不实现hashCode。 一旦我们调用equals和hashCode,默认的实现是什么? 从对象类? 他们是什么? 如何默认等于将工作? 默认的hashCode将如何工作,将返回什么? ==只会检查它们是否引用同一个对象,所以很容易,但equals()和hashCode()方法呢?

将Java中的两个string与可能的空值进行比较

我想比较两个string在Java中的相等性,当其中一个或两个都可以为null ,所以我不能简单地调用.equals() 。 什么是最好的方法? boolean compare(String str1, String str2) { … } 编辑: return ((str1 == str2) || (str1 != null && str1.equals(str2)));

IEqualityComparer <T>和IEquatable <T>有什么区别?

我想了解应该使用IEqualityComparer<T>和IEquatable<T>的场景。 两个MSDN文档看起来非常相似。

bashstring相等

在bash ,等号和双等号testing操作符之间有什么区别? [[ "a" = "a" ]] && echo equal || echo not-equal [[ "a" == "a" ]] && echo equal || echo not-equal [[ "a" = "b" ]] && echo equal || echo not-equal [[ "a" == "b" ]] && echo equal || echo not-equal 结果是: equal equal not-equal not-equal

从集合中获取元素

为什么不提供一个操作来获取一个元素,等于另一个元素? Set<Foo> set = …; … Foo foo = new Foo(1, 2, 3); Foo bar = set.get(foo); // get the Foo element from the Set that equals foo 我可以问Set是否包含一个等于bar的元素,那么为什么我不能得到这个元素? 🙁 澄清, equals方法被覆盖,但它只检查其中一个字段,而不是全部。 所以两个被认为相等的Foo对象实际上可以有不同的值,这就是为什么我不能使用foo 。

== ==和`!=`是否相互依赖?

我正在学习C ++中的运算符重载,我发现==和!=只是一些特殊的函数,可以为用户定义的types定制。 但是,我担心为什么需要两个单独的定义? 我认为如果a == b是真的,那么a != b自动为false,反之亦然,并且没有其他可能性,因为根据定义, a != b是!(a == b) 。 而且我无法想象任何情况都不是这样的。 但也许我的想象力是有限的,或者我对某些事情一无所知? 我知道我可以用另一个来定义一个,但这不是我所问的。 我也没有问及通过价值或身份来比较对象的区别。 或者两个对象是否可以同时相等和不相等(这绝对不是一种select!这些东西是相互排斥的)。 我问的是这样的: 有没有什么情况可以提出关于两个对象相同的问题是有道理的,但是询问他们是不是平等的没有意义? (无论是从用户的angular度,还是从实施者的angular度来看) 如果没有这种可能性,那么为什么C ++将这两个运算符定义为两个不同的函数呢?