Tag: 等于

两个具有相同哈希码的不等对象

Hashcode()和equals()的概念是 1)如果两个对象根据equal()相等,则在这两个对象中的每一个上调用hashcode方法应该产生相同的哈希码。 而另一个是 2)如果两个对象根据equal()不相等,则不需要在两个对象中的每一个上调用hashcode方法必须产生不同的值。 我尝试并理解了第一个,这是第一点的代码。 public class Test { public static void main(String[] args) { Map map = new HashMap(); map.put(1, 11); map.put(4, 11); System.out.println(map.hashCode()); Map map1 = new HashMap(); map1.put(1, 11); map1.put(4, 11); System.out.println(map1.hashCode()); if (map.equals(map1)) { System.out.println(“equal “); } } } 上面的程序为两个不同的对象提供相同的哈希码。 有人可以用一个例子来解释我,根据equals()不同的两个不同对象如何具有相同的哈希码。

如何根据值来比较两个地图

如何按价值比较两张地图? 我有两个包含相等值的地图,并希望通过它们的值进行比较。 这是一个例子: Map a = new HashMap(); a.put(“foo”, “bar”+”bar”); a.put(“zoo”, “bar”+”bar”); Map b = new HashMap(); b.put(new String(“foo”), “bar”+”bar”); b.put(new String(“zoo”), “bar”+”bar”); System.out.println(“equals: ” + a.equals(b)); // obviously false …. what to call to obtain a true? [[ 编辑:有人请编辑并修复此问题,以表示其实际意味着什么。 上面的代码打印“true”,而不是“false”。 ]] 显然,要实现比较并不困难,只需比较所有键及其相关值即可。 我不相信我是第一个这样做的人,因此必须在java或jakarta.commons库中已经有一个库函数。 谢谢

这些实体的equals和hashCode(Spring MVC + Hibernate)

有人可以建议我如何做这些实体的equals和hashCode方法? 这是Gara(竞赛)和Agenzia(代理商)之间的多对多关系:一个竞赛有很多代理商,一个代理商可以参加更多竞赛。 我尝试了一些实现但是我得到Stackoverflow错误,或者,当我更新Gara(竞赛)时,我无法更新Agenzie(代理商)的集合,因为我收到此错误: org.springframework.dao.DuplicateKeyException:具有相同标识符值的另一个对象已与会话关联:[com.myApp.model.GaraAgenzia#com.mmyApp.model.GaraAgenziaId@49f]; 嵌套exception是org.hibernate.NonUniqueObjectException:具有相同标识符值的另一个对象已与会话关联:[com.myApp.model.GaraAgenzia#com.myApp.model.GaraAgenziaId@49f] 当我尝试做更新。 谢谢 Gare.java: @Entity @Table(name = “gare”) public class Gara extends BaseEntity implements Serializable { private static final long serialVersionUID = 6395640401966812691L; /* * inizializzo logger */ static Logger logger = LoggerFactory.getLogger(Gara.class); /* * molti a molti gara-agenzia * * EAGER altrimenti da errore: could not initialize proxy – no […]

为什么我们需要在java中重写equals和hashcode,为什么我们不能使用Object类实现

伙计们请让我知道,在现实世界中我们为什么需要覆盖equals和hashcode,并且我们不能使用Object的equals和hashcode。

equals()方法的工作原理

我正在深入研究Java的基础知识。 我在本文中推断,java equals方法意味着,如果两个对象相等,那么它们必须具有相同的hashCode()。 这是我的例子。 public class Equals { /** * @param args */ public static void main(String[] args) { String a = new String(“a”); String b = new String(“a”); System.out.println(“a.hashCode() “+a.hashCode()); System.out.println(“b.hashCode() “+b.hashCode()); System.out.println(a == b); System.out.println(a.equals(b)); } } 输出: a.hashCode()97 b.hashCode()97 假 真正 实际Java语言等于方法 public boolean equals(Object obj) { return (this == obj); } […]

java中允许的Integer == int

我想知道java与int比较时是否自动将Integer转换为int? 或者==尝试并比较原语的引用? 这总是正确的还是我需要做i.intValue()==2 ? Integer i = Integer.valueOf(2); if (i==2){ //always? }

我什么时候需要覆盖equals和hashcode方法?

可能重复: 在Java中覆盖equals和hashCode 如果我有 class A { int x = 1; } … A a1 = new A(); A a2 = new A(); a1.equals(a2); 如果我比较2个A的实例而没有覆盖equals方法,我会得到预期的结果吗?

字符串等于和==字符串连接

我试图理解字符串连接与String比较的输出。 为了清楚起见,我有一个类使用==和equals来比较两个字符串。 我试图将==和equals()的输出连接到一个字符串。 equals()concats的输出,但==的输出不会连接。 使用java的装箱function,与字符串连接的布尔值将联系。 根据我的知识,equals和==都返回boolean。 那为什么会有这种差异呢? 任何人都可以解释一下吗? public class StringHandler { public void compareStrings() { String s1 = new String(“jai”); String s2 = “jai”; String s3 = “jai”; System.out.println(“Object and literal compare by double equal to :: ” + s1 == s2); System.out.println(“Object and literal compare by equals :: ” + s1.equals(s2)); System.out .println(“Literal […]

演示与Java的字符串比较

我想用Java中的几行代码来演示,比较两个字符串( String ),你必须使用equals()而不是operator == 。 这是我尝试过的东西: public static void main(String Args[]) { String s1 = “Hello”; String s2 = “Hello”; if (s1 == s2) System.out.println(“same strings”); else System.out.println(“different strings”); } 我期待这个输出: different strings ,因为测试s1 == s2我实际上是在比较两个引用(即地址)而不是objet的内容。 但实际上我得到了这个输出: same strings ! 浏览互联网我发现一些Java实现将优化上面的代码,以便s1和s2实际上将引用相同的字符串。 那么,在比较Java中的字符串(或对象)时,如何使用==运算符来演示问题?

比较与equals一致意味着什么? 如果我的class级不遵循这个原则,可能会发生什么?

从TreeMap的JavaDoc: 请注意,如果此有序映射要正确实现Map接口,则由有序映射维护的排序(无论是否提供显式比较器)必须与equals一致。 (请参阅Comparable或Comparator以获得与equals一致的精确定义。)这是因为Map接口是根据equals操作定义的,但是map使用compareTo(或compare)方法执行所有键比较,因此两个键从排序地图的角度来看,通过这种方法被视为相等的是相等的。 即使排序与equals不一致,也可以很好地定义有序映射的行为。 它只是没有遵守Map接口的一般合同。 有人可以给出一个具体的例子来说明如果排序与equals不一致可能会出现的问题吗? 举例来说,用户定义的类具有自然顺序,即它实现了Comparable。 JDK中的所有内部类都保持这个不变量吗?