Tag: equals

.Contains()方法不调用重写的equals方法

我有一个问题,我创建一个Foo对象的ArrayList,我重写equals方法,我不能得到contains方法来调用equals方法。 我已经尝试重写equals和hashcode,但它仍然无法正常工作。 我敢肯定有一个合乎逻辑的解释,为什么这是,但我现在无法弄清楚我自己大声笑。 我想要一种方法来查看列表是否包含指定的id。 这是一些代码: import java.util.ArrayList; import java.util.List; public class Foo { private String id; public static void main(String… args){ Foo a = new Foo(“ID1”); Foo b = new Foo(“ID2”); Foo c = new Foo(“ID3”); List fooList = new ArrayList(); fooList.add(a); fooList.add(b); fooList.add(c); System.out.println(fooList.contains(“ID1”)); System.out.println(fooList.contains(“ID2”)); System.out.println(fooList.contains(“ID5”)); } public Foo(String id){ this.id = id; } […]

override equals方法来比较java中的多个字段

在java中重写equals方法以比较多个字段的最佳方法是什么? 例如,我在类中有4个对象,o1,o2,o3,o4,我希望将所有这些对象与传递的对象进行比较,使用equals方法。 if (o1 != null && o2 != null && o3 != null && o4 != null && obj.o1 != null && obj.o2 != null && obj.o3 != null && obj.o4 != null && o1.equals(obj.o1) && o2.equals(obj.o2) && o3.equals(obj.o3) && o4.equals(obj.o4)) { do something } 这段代码的问题在于它不清楚,如果我们有更多字段,就不能轻易修改。 有没有更好的方法来实现这一目标?

为什么我不能使用equalsinheritance?

当我读一本Java书时,作者已经说过,在设计类时,使用带inheritance的equals()通常是不安全的。 例如: public final class Date { public boolean equals(Object o) { // some code here } } 在上面的类中,我们应该把final ,所以其他类不能从这inheritance。 我的问题是,为什么在允许另一个类从此inheritance时它是不安全的?

为什么我不能在Java中“静态导入”一个“等于”方法?

我喜欢在这里使用这个方法: org.apache.commons.lang.ObjectUtils.equals(Object object1, Object object2) 唯一的缺点(例如,与Google Guava相比),我无法静态导入该方法。 也就是说这没用: import static org.apache.commons.lang.ObjectUtils.equals; …因为我的Eclipse编译器在编写时无法正确链接该方法 equals(obj1, obj2); 错误是: Object类型中的方法equals(Object)不适用于参数(…,…) 这是为什么? 如果在任何超类型中存在具有相同名称(但不是相同的签名)的方法,我的静态导入方法是否不适用? 这是在JLS中正式指定的吗? 还是一些Eclipse编译问题? UPDATE 这也不起作用: import static org.apache.commons.lang.ObjectUtils.defaultIfNull; public class Test { void test() { defaultIfNull(null, null); // ^^ compilation error here } void defaultIfNull() { } } javac错误消息: Test.java:5: defaultIfNull() in Test cannot be applied to (,) […]

Java将2个整数与equals或==进行比较?

我是非常非常新的Java,我想知道如何比较2个整数? 我知道==完成工作……但是等于什么? 这可以比较2个整数吗? (当我说整数时,我的意思是“int”而非“整数”)。 我的代码是: import java.lang.*; import java.util.Scanner; //i read 2 integers the first_int and second_int //Code above if(first_int.equals(second_int)){ //do smth } //Other Code 但由于某种原因,这不起作用..我的意思是Netbeans给了我一个错误:“int不能被解除引用”为什么?

Java Set集合 – 覆盖equals方法

有没有办法覆盖Set数据类型使用的equals方法? 我为一个名为Fee的类编写了一个自定义equals方法。 现在我有一个LnkedList Fee LnkedList ,我想确保没有重复的条目。 因此,我正在考虑使用LinkedList一个Set insted,但是决定两个费用是否相等的标准存在于Fee类中的overriden equals方法中。 如果使用LinkedList ,我将不得不遍历每个列表项并在Fee类中调用overriden equals方法,其余条目作为参数。 仅仅阅读这个听起来像是太多的处理并且会增加计算复杂性。 我可以使用带有重写的equals方法的Set吗? 我是不是该?

自动检查equals,hashCode和compareTo的一致性的技巧?

我很清楚合同需要确保hashCode与equals一致,并且equals与compareTo一致。 但是,这在实践中经常被违反 。 是否有可以自动测试此一致性的工具,技术或库? 我怀疑不幸的是答案是“不”,但能够对这种可以利用库调用或框架的东西进行unit testing而不是需要手动编写自定义测试是有用的。每个重要的案例。 如果我不清楚我的一致性是什么意思,对于hashCode和equals ,请参考以下内容: 如果两个对象根据equals(Object)方法相等,则对两个对象中的每一个调用hashCode方法必须生成相同的整数结果。 对于equals和compareTo我参考以下内容: 当且仅当e1.compareTo(e2)== 0具有与c的每个e1和e2的e1.equals(e2)相同的布尔值时,C类的自然排序被认为与equals一致。

在equals和hashcode方法中使用自动生成的hibenate实体对象的id

可爱的等号和哈希码,所有的理论都在这里 ,也在这里 我已经决定在我的许多hibernate实体/域对象中使用equals()和hashcode()中的自动生成的id。 但是,许多网站都说你不应该这样做,因为在比较或使用哈希码的过程中,第一次将对象持久存在数据库的风险。 我的观点是,在大多数用例中,这比任何其他字段更改都要小得多。 各个域对象在首次创建时会生成一次id,而几乎所有其他字段都有机会在正常业务流程中进行更改(即使可以更改唯一的用户名……)。 在我的许多域对象中,唯一的id几乎是唯一合适的字段(Person,Address,Pet,… Customer等等??组合字段是一个好主意,但从不使用自动生成的id,我想,不是好建议。 我错过了别的什么吗?

为什么在Object中定义了equals和hashCode?

决定在java.lang.Object中包含这些方法的原因是什么? 对于许多类来说,平等和散列是没有意义的。 制作两个接口更合乎逻辑: interface Equalable { boolean equals(Equalable other); } interface Hashable extends Equalable { int hashCode(); } 例如,HashSet定义可能看起来像 class HashSet … 它可以防止一个常见的初学者错误 – 使用一组项而不实现equals / hashCode。

Java中的字符串比较和字符串实习

何时应该将String作为对象进行比较,何时应该使用equals方法? 为了确保,我总是使用equals ,但这似乎不是很有效。 在什么情况下我可以确定string1 == string2是安全的? 谢谢!