Tag: 等于

具有双向关联的类的equals()方法

我正在尝试在我的应用程序中为Java类Book和Chapter实现equals方法。 Book有一套Chapter ,而Chapter有一本相关的Book 。 双向关联如下所示: class Book{ private String isbn; private String name; private Date publishDate; private Set chapters; … public boolean equals(Object o){ if(o == this){ return true; } if (!(o instanceof Book)){ return false; } Book book = (Book)o; if( (this.isbn.equals(book.getIsbn()) ) && (this.name.equals(book.getName())) &&(this.publishDate.equals(book.getPublishDate())) &&(this.chapters.equals(book.getChapters())) ){ return true; }else{ return false; } […]

Java文件等于

我不知道你们,但至少我预计f1会在下面的代码中等于f2,但显然情况并非如此! 你对此有何看法? 看来我必须编写自己的equals方法来支持它,对吗? import java.io.*; public class FileEquals { public static void main(String[] args) { File f1 = new File(“./hello.txt”); File f2 = new File(“hello.txt”); System.out.println(“f1: ” + f1.getName()); System.out.println(“f2: ” + f2.getName()); System.out.println(“f1.equals(f2) returns ” + f1.equals(f2)); System.out.println(“f1.compareTo(f2) returns ” + f1.compareTo(f2)); } }

为什么更改用作HashMap中的键的对象的哈希码会使查找返回null?

请考虑以下情形: Object o1 = new Object(); Object o2 = new Object(); HashMap map = new HashMap(); map.put(o1, o2); boolean test1 = map.get(o1) == o2; // This evaluates to true // Now lets say we alter the state of o1: o1.setSomeInternalState(Object newState); boolean test2 = map.get(o1) == o2; // This evaluates to false, because now map.get(o1) […]

Java中的equals()和hashCode()契约

Bert Bates和Kathy Sierra的SCJP 6学习指南在第554页(以及其他要求中)指出x.hashCode()!= y.hashCode()要求x.equals(y)== false 。 但是Javadoc for Object没有明确提到这样的要求。 引用: 如果两个对象根据equals(Object)方法相等,则对两个对象中的每一个调用hashCode方法必须生成相同的整数结果。 我应该采用Javadoc所说的物质含义,例如eq – > hc ? 那么这两个来源之间就不会有冲突。

比较两个列表并从中删除重复项

我有一个名为FormObject的对象,它包含两个ArrayLists – oldBooks和newBooks – 两者都包含Book对象。 oldBooks允许包含重复的Book对象newBooks不允许在其自身中包含重复的Book对象,并且不能在oldBooks列表中包含任何Book对象的重复项。 重复Book的定义很复杂,我无法覆盖equals方法,因为定义在Book对象的所有用途中都不是通用的。 我计划在FormObject类上有一个名为removeDuplicateNewBooks的方法,它将执行上述function。 你会如何实现这个? 我的第一个想法是使用HashSets消除重复但不能在Book对象上覆盖equals意味着它将无法工作。

LinkedHashSet .equals()vs LinkedList .equals()具有相同的元素但顺序不同

考虑以下SSCCE: public static void main(String[] args) { LinkedHashSet set1 = new LinkedHashSet(); set1.add(“Bob”); set1.add(“Tom”); set1.add(“Sam”); LinkedHashSet set2 = new LinkedHashSet(); set2.add(“Sam”); set2.add(“Bob”); set2.add(“Tom”); System.out.println(set1); System.out.println(set2); System.out.println(set1.equals(set2)); } 这打印: [Bob, Tom, Sam] [Sam, Bob, Tom] true 但是,如果将LinkedHashSet更改为LinkedList : public static void main(String[] args) { LinkedList set1 = new LinkedList(); set1.add(“Bob”); set1.add(“Tom”); set1.add(“Sam”); LinkedList set2 = new […]

覆盖hashCode() – 这还不错吗?

对于其字段仅为原始的类,例如: class Foo { int a; String b; boolean c; long d; boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Foo)) return false; Foo other = (Foo) o; return a == other.a && b.equals(other.b) && c == other.c && d = other.d; } } 这是一个合理的“足够好”的方式来编写hashCode()吗? boolean hashCode() { return (b […]

如何让unit testing在java 7中运行:java.lang.VerifyError:期望分支目标下的stackmap帧

嗨,我正在使用maven 3.0.3运行maven测试,使用hibernate 4.0.0最终版本和jdk7 update 2上的spring 3.1。 我收到以下错误。 Caused by: java.lang.VerifyError: Expecting a stackmap frame at branch target 63 in method ${myDomainClass}.equals(Ljava/lang/Object;)Z at offset 24 at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2442) at java.lang.Class.getDeclaredMethods(Class.java:1808) at org.hibernate.property.BasicPropertyAccessor.getterMethod(BasicPropertyAccessor.java:352) at org.hibernate.property.BasicPropertyAccessor.getGetterOrNull(BasicPropertyAccessor.java:331) at org.hibernate.property.BasicPropertyAccessor.createGetter(BasicPropertyAccessor.java:314) at org.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAccessor.java:310) at org.hibernate.internal.util.ReflectHelper.getter(ReflectHelper.java:250) at org.hibernate.internal.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:229) at org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:314) at org.hibernate.cfg.HbmBinder.bindSimpleId(HbmBinder.java:447) at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:380) at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:320) at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:171) at org.hibernate.cfg.Configuration$MetadataSourceQueue.processHbmXml(Configuration.java:3377) […]

有没有办法使用Eclipse列出某个类的equals()的所有调用?

我目前面临以下问题: 我有一个类,其中equals() – 方法被覆盖。 但是我不确定它是否曾被使用过(无论是在我的同事还是在我的同事项目中)。 有办法找出来吗? 当我搜索引用时,它只是给了我对Object equals() – Method(很多)的所有引用。 肯定必须有一种比扫描所有这些更简单的方法…… 有人有个主意吗?

比较Java中的Character,Integer和类似类型:使用equals还是==?

我想确定Java中的一些东西:如果我有一个字符或一个整数或一个Long以及那些东西,我应该使用equals还是==足够? 我知道使用字符串并不能保证每个唯一字符串只有一个实例,但我不确定其他盒装类型。 我的直觉是使用平等,但我想确保我不浪费表现。