Tag: 等于

比较Java中的双精度会产生奇怪的结果

我真的无法理解为什么会发生以下情况: Double d = 0.0; System.out.println(d == 0); // is true System.out.println(d.equals(0)); // is false ?! 然而,这可以按预期工作: Double d = 0.0; System.out.println(d == 0.0); // true System.out.println(d.equals(0.0)); // true 我很肯定这在某种程度上与自动装箱有关,但我真的不知道为什么在使用==运算符和调用.equals时为什么0会被加框 。 这不是暗示违反了equals合同吗? *它是自反的:对于任何非空参考值 * x,x.equals(x)应该返回 *是的。 编辑 : 谢谢你的快速答案。 我认为它的盒装方式不同,真正的问题是:它为什么装箱不同? 我的意思是,如果d == 0d比d.equals(0d)更直观和预期,这将更直观,但是如果d == 0看起来像一个Integer是true比’直觉’ d.equals(0)也应该是真的。

在Java中使用带有String和Object的equals()方法

Object o1 = new Object(); Object o2 = new Object(); //o1=o2; System.out.println(o1.equals(o2)); 它返回false 。 如果删除注释,它可以返回true 。 为什么不适用于String类? String s1=new String(); String s2=new String(); System.out.println(s1.equals(s2)); 它返回true 。 为什么? (因为String使用实习或其他涉及的东西?)

如何使用“instanceof”实现generics的“equals”方法?

我有一个接受generics类型的类 ,我想以一种非笨拙的方式覆盖equals方法(即看起来很干净并且代码量很少的东西,但对于非常一般的用例)。 现在我有这样的事情: public class SingularNode { private T value; @SuppressWarnings(“unchecked”) @Override public boolean equals(Object other){ if(other instanceof SingularNode){ if(((SingularNode)other).value.equals(value)){ return true; } } return false; } } 我猜,这是非常有缺陷的 – 我正在对other对象的SingularNode进行强制转换,这可能会引发错误 。 另一件事是 – 当我这样做if(other instanceof SingularNode)我实际上并没有检查到正确的东西。 我实际上想检查类型T而不是类型? 。 每当我试图制作? 进入T ,我得到一些错误: 无法对参数化类型SingularNode执行instanceof检查。 请改为使用SingularNodeforms,因为在运行时将删除其他generics类型信息 我怎么能绕过这个? 有没有办法做T.class.isInstance(other); ? 我想有一个非常难看的黑客解决方案是这样的: @SuppressWarnings(“unchecked”) public boolean isEqualTo(Class c, Object obj){ […]

麻烦骑马并在java中使用equals方法

我在试图弄清楚如何在AM FM和XM之间比较selectedRadio时遇到问题,以便我可以确定它当前在哪一个然后返回特定无线电的电台。 我知道我需要equals方法我只是不确定正确的方法来使用它来获得我正在寻找的结果。 public class AutoRadioSystem { private Radio selectedRadio; private AMRadio radioAM; private FMRadio radioFM; private XMRadio radioXM; //I’m not sure if this is the correct way to do this so that selectedRadio equals the object of radioAM public AutoRadioSystem() { selectedRadio = radioAM; } //trying to figure out how to compare if selectedRadio […]

等于具有可比接口的方法合同

我有像Person这样的自定义类: public class Person { int age; String name; } 现在我想根据age对Person类对象进行排序。 所以我将使用Comparable接口并实现compareTo()方法。 并且比较将有基于age比较人物对象的逻辑。 所以,如果我这样做: Collections.sort(list); // where list is a list of person 我会根据age得到排序人名单。 但我在某处读到,当我们进行Comparable实现时,我们也需要重写equals()方法。 但我现在还没有看到它的使用。 任何人都可以解释,如果我想根据age sort ,还需要覆盖equals()方法吗?

检查对象相等而不等于在java中重写

在java中是否有任何utils允许检查对象的相等性而不等于覆盖? 出于某些原因,我不想为我的class级提供equals方法。 我需要在unit testing中使用类似SomeUtils.equals(a,b)的东西来比较所有对象字段(通过reflection我猜)。

一致的Equals()结果,但不一致的TreeMap.containsKey()结果

我有以下对象Node : private class Node implements Comparable(){ private String guid(); … public boolean equals(Node o){ return (this == o); } public int hashCode(){ return guid.hashCode(); } public int compareTo(Node o){ return (this.hashCode() – o.hashCode()); } … } 我在以下TreeMap使用它: TreeMap<Node, TreeSet> nodes = new TreeMap<Node, TreeSet>(); 现在,树图在名为Graph的类中使用,以存储当前在图中的节点,以及它们的一组边(来自类Edge )。 我的问题是当我尝试执行时: public containsNode(n){ for (Node x : nodes.keySet()) […]

在处理inheritance时重写equals方法

我一直在阅读在处理子类时如何最好地覆盖equals方法,在这里我发现了不少post。 他们建议使用instanceof或getClass()来实现解决方案的不同方法来比较不同子类的对象。 但是参考Effective Java,我的理解是(我是新手,所以我可能错了!)Bloch认为最终两者都有问题,“没有办法扩展可实例化的类并添加一个值组件,同时保留等于合同,除非你愿意放弃面向对象抽象的好处“。 然后建议“赞成合成而非inheritance”。 所以我正在处理这个类层次结构:AbstractClass,ConcreteClass1和ConcreteClass2。 ConcreteClass1扩展了AbstractClass,ConcreteClass2扩展了ConcreteClass1。 目前只有AbstractClass重写了equals方法。 所以在AbstractClass中: public abstract class AbstractClass { private String id; public boolean equals(Object other) { return other != null && other.getClass().equals(getClass()) && id.equals(((AbstractClass) other).id); } } 在ConcreteClass1我有: public class ConcreteClassOne extends AbstractClass { private final AbstractClass parent; public ConcreteClassOne( String anId, AbstractClass aParent ) { super( anId ); […]

如何在java中正确覆盖equalsinheritance?

我正在使用hibernate和id …用于持久性(这就是为什么它在比较中被省略)。 (另外,使用google guava helper equals) HolidayPackageVariant: public abstract class HolidayPackageVariant { private Integer idHolidayPackageVariant; private HolidayPackage holidayPackage; private String typeHolidayPackage; @Override public boolean equals(Object obj) { if (obj == this) return true; if(obj == null) return false; if (getClass().equals(obj.getClass())) { final HolidayPackageVariant otherPackageVariant = (HolidayPackageVariant) obj; return Objects.equal(getTypeHolidayPackage(),otherPackageVariant.getTypeHolidayPackage()) && Objects.equal(getHolidayPackage(), otherPackageVariant.getHolidayPackage()); } return false; […]

Java 1.7覆盖hashCode()的行为与我的预期不符

我有一个类,我已经覆盖了hashCode方法和equals方法。 equals方法的行为与我期望的一样,但是hashCode方法似乎没有像我期望的那样运行。 我假设因为我的期望不正确,但不确定原因。 以下是重写方法: public class Car extends SomeBaseClass implements Cloneable, Serializable { private static final long serialVersionUID = 1L; private String id; private String name; private String carName; private String carModel; private String displayTextCar; public boolean equals(Car car) { return (getCarName().equals(car.getCarName()) && getCarModel().equals(car.getCarModel())); } public int hashCode() { return (this.getCarName() + this.getCarModel()).hashCode(); } 现在我有一个测试类,在其中创建两个car对象,并调用equals方法,然后将每个car实例放入HashMap。 […]