Questions tagged «equals»

引用Java equals方法,指示某个对象是否“等于”该对象。

8
重写Java equals()方法-不起作用?
equals()今天,我遇到了一个有趣(非常令人沮丧)的方法问题,该问题导致我认为是经过良好测试的类崩溃了,并导致了一个错误,使我花了很长时间来追踪。 为了完整起见,我没有使用IDE或调试器-只是老式的文本编辑器和System.out。时间非常有限,这是一个学校项目。 无论如何- 我开发一个基本的购物车可能包含ArrayList的Book对象。为了贯彻落实addBook(),removeBook()以及hasBook()对车的方法,我想检查,如果Book在已经存在Cart。所以我走了- public boolean equals(Book b) { ... // More code here - null checks if (b.getID() == this.getID()) return true; else return false; } 在测试中一切正常。我创建6个对象,并用数据填充它们。在上执行许多添加,删除,has()操作Cart,一切正常。我读到您可以拥有equals(TYPE var)或equals(Object o) { (CAST) var }可以假设自从它开始工作以来,并没有太大关系。 然后,我遇到了一个问题-我需要创建一个Book与对象仅在ID从Book类内它。没有其他数据可以输入。基本上如下: public boolean hasBook(int i) { Book b = new Book(i); return hasBook(b); } public boolean …
150 java  equals  overriding 

21
compareTo()与equals()
String在Java中测试的相等性时,我一直使用,equals()因为对我而言,这似乎是最自然的方法。毕竟,它的名字已经说明了它打算做什么。但是,我的一位同事最近告诉我,有人教我使用compareTo() == 0代替equals()。这对我来说感觉很不自然(这compareTo()是为了提供顺序而不是为了比较而不是比较平等),甚至有些危险(因为compareTo() == 0不一定在所有情况下都意味着平等,即使我知道这样做对于String)。 他不知道为什么要教他compareTo()代替equals()for 来使用String,我也找不到任何原因。这真的是个人喜好问题,还是使用这两种方法的真正原因?
118 java  string  equals  compareto 

9
如何在Java中覆盖equals方法
我试图覆盖Java中的equals方法。我有一堂课People,基本上有2个数据字段name和age。现在,我想重写equals方法,以便可以在2个People对象之间进行检查。 我的代码如下 public boolean equals(People other){ boolean result; if((other == null) || (getClass() != other.getClass())){ result = false; } // end if else{ People otherPeople = (People)other; result = name.equals(other.name) && age.equals(other.age); } // end else return result; } // end equals 但是当我写age.equals(other.age)它给我错误时,因为equals方法只能比较String并且age是Integer。 解 我==按照建议使用运算符,问题解决了。
108 java  overriding  equals 

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




3
为什么“ true” == true在JavaScript中显示为false?
MDC对==操作员的描述如下: 如果两个操作数的类型不同,则JavaScript会转换操作数,然后进行严格比较。如果操作数是数字或布尔值,则在可能的情况下将操作数转换为数字;否则,操作数将转换为数字。否则,如果一个操作数是一个字符串,则另一个操作数将尽可能转换为字符串。 考虑到这一点,我将评估"true" == true如下: 它们是同一类型吗?没有 操作数是数字还是布尔值?是 我们可以将它们都转换为数字吗?否(isNaN(Number("true")) // true) 两个操作数都是字符串吗?是 我们可以将另一个操作数转换为字符串吗?是(String(true) === "true" // true) 我最后得到的字符串"true"和"true"应该为true,但是JavaScript显示为false。 我错过了什么?

15
用.equals()和==运算符比较两个对象
我建立了一个String领域的课程。然后,我创建了两个对象,我也必须使用==运算符对其进行比较.equals()。这是我所做的: public class MyClass { String a; public MyClass(String ab) { a = ab; } public boolean equals(Object object2) { if(a == object2) { return true; } else return false; } public boolean equals2(Object object2) { if(a.equals(object2)) { return true; } else return false; } public static void main(String[] args) …
84 java  class  object  methods  equals 

4
启用IntelliJ的花式≠(不等于)运算符
我在Hadi Hariri举办的GOTO 2016•Kotlin-准备生产会议上见证了这一点。 在他的一些代码中,通常如下所示: if (x != y) { /* do some stuff */ } 以典雅的风格展示: if (x ≠ y) { /* do some stuff */ } 这是实时编码会话的屏幕截图,标记为≠操作员基础: 他使用常规!=运算符,IDEA负责其余的工作。 我一直在玩我的IntelliJ的配置,但不能让这个新的花哨功能。有什么帮助吗? PS。我正在使用最新的Ultimate版本(2016.3.3)。

9
Java赋值运算符执行
在Java中,我知道赋值的结果是正确的操作数的值,因此类似语句的结果x == (y = x)为to true。 但是,此代码输出false。 public static void main(String[]args){ String x = "hello"; String y = "goodbye"; System.out.println(x.equals(x = y)); } 为什么是这样?以我的理解,它首先求值(x = y),它分配x的值y,然后返回的值y。然后x.equals(y)进行了评估,应该是true从那时起x,y现在应该共享相同的引用,但是我得到了false。 这是怎么回事

12
如果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)不应该return false抛出一个好主意NullPointerException呢? 如果我们尽可能重写合同以改为anyObject.equals(null)始终抛出,那将是一个坏主意NullPointerException吗? 与比较 Comparable 相比之下,Comparable合同是这样说的: 请注意,null不是任何类的实例,并e.compareTo(null)应抛出NullPointerException,即使e.equals(null)回报false。 如果NullPointerException适合compareTo,为什么不适合equals呢? 相关问题 关于null的可比合同和比较合同 一个纯粹的语义论点 这些是Object.equals(Object obj)文档中的实际词语: 指示其他某个对象是否“等于”该对象。 什么是物体? JLS 4.3.1对象 一个对象是一个类的实例或阵列。 引用值(通常只是引用)是指向这些对象的指针,是一个特殊的null引用,它不引用任何对象。 从这个角度来说,我的论点非常简单。 equals测试其他对象是否“等于”this null参考没有给出其他测试对象 因此,equals(null)应该扔NullPointerException

4
与equals方法相关的Java代码
我正在为考试练习,发现了一个我不理解的示例问题。 对于以下代码,找到输出是什么: 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 = …
75 java  equals 

2
C#中基于接口的编程的操作员重载
背景 我在当前项目上使用基于接口的编程,并且在重载运算符(特别是Equality和Inequality运算符)时遇到了问题。 假设条件 我正在使用C#3.0,.NET 3.5和Visual Studio 2008 更新-以下假设是错误的! 要求所有比较均使用Equals而不是operator ==并不是一个可行的解决方案,尤其是在将类型传递给库(例如Collections)时。 我担心要求使用Equals而不是operator ==的原因是,我在.NET指南中找不到它说它将使用Equals而不是operator ==甚至没有建议的地方。但是,在重新阅读《覆盖等于和运算符==的准则》之后,我发现了这一点: 默认情况下,运算符==通过确定两个引用是否指示同一对象来测试引用是否相等。因此,引用类型不必实现运算符==即可获得此功能。当类型是不可变的,即实例中包含的数据不能更改时,重载运算符==以比较值相等而不是引用相等是有用的,因为作为不可变对象,它们可以被认为与因为它们具有相同的价值。在非不可变类型中覆盖运算符==不是一个好主意。 这个平等的接口 当使用诸如Contains,IndexOf,LastIndexOf和Remove这样的方法测试是否相等时,IEquatable接口将由Dictionary,List和LinkedList等通用集合对象使用。应该为可能存储在通用集合中的任何对象实现它。 制约因素 任何解决方案都不必要求将对象从其接口转换为具体类型。 问题 当operator ==的两端都是接口时,没有底层具体类型的operator ==重载方法签名匹配,因此将调用默认的Object operator ==方法。 在类上重载运算符时,二进制运算符的至少一个参数必须为包含类型,否则会生成编译器错误(错误BC33021 http://msdn.microsoft.com/zh-cn/library/watt39ff .aspx) 无法在接口上指定实现 请参阅下面的代码和输出演示问题。 题 使用基于接口的编程时,如何为类提供适当的运算符重载? 参考文献 ==运算符(C#参考) 对于预定义的值类型,相等运算符(==)如果其操作数的值相等,则返回true,否则返回false。对于字符串以外的引用类型,如果==的两个操作数引用相同的对象,则返回true。对于字符串类型,==比较字符串的值。 也可以看看 码 using System; namespace OperatorOverloadsWithInterfaces { public interface IAddress : IEquatable<IAddress> { string StreetName { …

5
如何用现代Java比较数组列表的相等性?
我有两个数组列表。 如何在不使用外部库的情况下轻松地将它们与Java 8及其功能的相等性进行比较?我正在寻找一种比这种强力代码(未经测试的代码,可能包含错别字等)更好的(更高级别,更短,更有效)的解决方案: boolean compare(List<String[]> list1, List<String[]> list2) { // tests for nulls etc omitted if(list1.size() != list2.size()) { return false; } for(i=0; i<list1.size(); ++i) { if(!Arrays.equals(list1.get(i), list2.get(i))) { return false; } } return true; } 或者,如果没有更好的方法,那也是一个有效的答案。 奖励:如果Java 9提供了Java 8可以提供的更好的方法,请随时提一下。 编辑:在查看评论并查看此问题如何变得中等热点之后,我认为“更好”应包括在检查数组内容之前首先检查所有数组的长度,因为如果有内部的话,它有可能更快地找到不等式数组很长。
70 java  arrays  list  java-8  equals 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.