Tag: 等于

为什么这些==但不是`equals()`?

当涉及到int , Integer和其他类型的数字时,我对Java处理==和equals()的方式感到有点困惑。 例如: Integer X = 9000; int x = 9000; Short Y = 9000; short y = 9000; List results = new ArrayList(); // results.add(X == Y); DOES NOT COMPILE 1) results.add(Y == 9000); // 2) results.add(X == y); // 3) results.add(X.equals(x)); // 4) results.add(X.equals(Y)); // 5) results.add(X.equals(y)); // 6) System.out.println(results); 输出(也许你应该先猜测): [true, […]

Java – 基类和子类中的equals方法

我有一个简单的基类,后来由许多单独的类扩展,这可能会引入新的字段,但不一定。 我在基类中定义了一个equals方法,但是也为一些子类重写了它。 可以在基础/子类中混合定义吗? 在我的情况下,它是为了避免代码重复检查相同的字段。

如何实现hashCode和equals方法

我应该如何在Java中为以下类实现hashCode()和equals() ? class Emp { int empid ; // unique across all the departments String name; String dept_name ; String code ; // unique for the department }

为什么Java没有看到整数是平等的?

我有应该是相等的整数(我通过输出validation它)。 但在我的if条件下,Java没有看到这些变量具有相同的值。 我有以下代码: if (pay[0]==point[0] && pay[1]==point[1]) { game.log.fine(“>>>>>> the same”); } else { game.log.fine(“>>>>>> different”); } game.log.fine(“Compare:” + pay[0] + “,” + pay[1] + ” -> ” + point[0] + “,” + point[1]); 它产生以下输出: FINE: >>>>>> different FINE: Compare:: 60,145 -> 60,145 可能我必须补充point就是这样定义: Integer[] point = new Integer[2]; 并从循环构造函数中获取: for (Integer[] pay : payoffs2exchanges.keySet()) […]

使用’==’代替.equals for Java strings

可能重复: 是什么让参考比较(==)适用于Java中的某些字符串? 我知道之前已经问过 ,但是尽管建议使用.equals()而不是==比较运算符,但我发现==始终有效: String s1 = “Hello”; String s2 = “Hello”; System.out.println(s1 == s2); // true 任何人都可以给我一个==运算符失败的例子吗?

==运算符和equals()之间有什么区别? (用hashcode()???)

我正在更深入地学习哈希码,并认为: 1.如果重写equals(),则必须覆盖hashcode()。 2.要查找2个对象是否是同一个对象,请使用==运算符 考虑到这两个因素,在Java中我假设当使用== operator来比较2个实例是否相同时, if(object1 == object2) 实际上是在做 if(object1.hashcode() == object2.hashcode()) 但是通过下面的测试看起来我错了。 public class Main { public static void main(String[] args){ Obj1 one = new Obj1(); Obj1 two = new Obj1(); //is this calling hashCode() in backend??? if(one == two) { System.out.println(“same”); } else { System.out.println(“nope”); } //this is of course return true if(one […]

为什么不在Java中缓存整数?

我知道这个主题有类似的post ,但它们并没有完全解决我的问题。 当你这样做时: Integer a = 10; Integer b = 10; System.out.println(“a == b: ” + (a == b)); 这将(显然)在大多数情况下打印为true ,因为[-128,127]范围内的整数以某种方式被缓存。 但: Integer a = new Integer(10); Integer b = new Integer(10); System.out.println(“a == b: ” + (a == b)); 将返回false 。 我理解我要求Integer的新实例,但由于盒装原语在Java中是不可变的,并且机器已经在那里做“正确的事情”(如第一种情况所示),为什么会发生这种情况? 如果一个带有10的Integer的所有实例在内存中都是同一个对象,那会不会更有意义? 换句话说,为什么我们没有“整数实习”,这类似于“字符串实习”? 更好的是,如果表示同一事物的盒装基元的实例( 无论值(和类型)是否为同一个对象) ,它会更有意义吗? 或者至少正确回应== ?

当我覆盖equals()方法时,为什么要覆盖hashCode()?

好吧,我从许多地方和消息来源得知,每当我覆盖equals()方法时,我也需要覆盖hashCode()方法。 但请考虑以下代码 package test; public class MyCustomObject { int intVal1; int intVal2; public MyCustomObject(int val1, int val2){ intVal1 = val1; intVal2 = val2; } public boolean equals(Object obj){ return (((MyCustomObject)obj).intVal1 == this.intVal1) && (((MyCustomObject)obj).intVal2 == this.intVal2); } public static void main(String a[]){ MyCustomObject m1 = new MyCustomObject(3,5); MyCustomObject m2 = new MyCustomObject(3,5); MyCustomObject m3 = […]

如何确保hashCode()与equals()一致?

当重写java.lang.Object的equals()函数时,javadocs建议, 通常需要在重写此方法时覆盖hashCode方法,以便维护hashCode方法的常规协定,该方法声明相等的对象必须具有相等的哈希代码。 hashCode()方法必须为每个对象返回一个唯一的整数 (这在基于内存位置比较对象时很容易,只需返回对象的唯一整数地址) 应该如何覆盖hashCode()方法,以便它仅基于该对象的特性为每个对象返回一个唯一的整数 ? public class People{ public String name; public int age; public int hashCode(){ // How to get a unique integer based on name and age? } } /*******************************/ public class App{ public static void main( String args[] ){ People mike = new People(); People melissa = new People(); mike.name = […]

覆盖java equals()方法 – 不工作?

我今天用equals()方法遇到了一个有趣(而且非常令人沮丧)的问题,这导致了我认为是经过良好测试的类崩溃并导致我花了很长时间才能追踪的错误。 为了完整起见,我没有使用IDE或调试器 – 只是老式的文本编辑器和System.out。 时间非常有限,这是一个学校项目。 无论如何 – 我正在开发一个基本的购物车,它可以包含Book对象的ArrayList 。 为了实现addBook() , removeBook()和hasBook()方法,我想检查Book已存在Book 。 我走了 – public boolean equals(Book b) { … // More code here – null checks if (b.getID() == this.getID()) return true; else return false; } 一切都在测试中运行良好。 我创建了6个对象并用数据填充它们。 在Cart上做了很多添加,删除,has()操作,一切正常。 我读到你可以有equals(TYPE var)或equals(Object o) { (CAST) var }但是假设它既然有效,也没关系太多。 然后我遇到了一个问题 – 我需要在Book类中创建一个只有 ID的Book对象。 不会输入任何其他数据。 基本上如下: public […]