Tag: 等于

将Date对象与Java中的TimeStamp进行比较

当我测试这段代码时: java.util.Date date = new java.util.Date(); java.util.Date stamp = new java.sql.Timestamp(date.getTime()); assertTrue(date.equals(stamp)); assertTrue(date.compareTo(stamp) == 0); assertTrue(stamp.compareTo(date) == 0); assertTrue(stamp.equals(date)); 我期待一个真实,真实,真实,虚假。 因为这: 在java.sql.Timestamp的javadoc中,它指出: 注意:此类型是java.util.Date和单独的纳秒值的组合。 只有整数秒存储在java.util.Date组件中。 分数秒 – 纳米 – 是分开的。 传递类型为java.util.Date的值时,Timestamp.equals(Object)方法永远不会返回true,因为日期的nanos组件未知。 因此,Timestamp.equals(Object)方法与java.util.Date.equals(Object)方法不对称。 此外,哈希码方法使用底层的java.util.Date实现,因此在其计算中不包括nanos。 由于Timestamp类和上面提到的java.util.Date类之间存在差异,因此建议代码不要将Timestamp值一般视为java.util.Date的实例。 Timestamp和java.util.Date之间的inheritance关系实际上表示实现inheritance,而不是类型inheritance。 但相反,我会得到一个真实的,虚假的,真实的,虚假的。 有任何想法吗? 编辑:当我用equals方法检查两个日期时出现此问题,但其中一个Date对象来自Hibernate类并且调试我看到该对象包含TimeStamp。 所以equals方法评估为false,然后我发现了这个: http : //mattfleming.com/node/141 但是当我尝试代码时,我会得到不同的结果……如果我不能同时使用equals和compareTo,我应该用什么来检查2个日期是否相同?!?!

将两个字符串与“==”进行比较:它何时起作用?

假设你有三个字符串, String s1 = “string one”; String s2 = new String(“string one”); String s3 = “string one”; 我知道s1 == s2是false ,但我在某处读到了s1 == s3为true 。 它是否正确? 为什么或者为什么不?

深reflection比较等于

我试图通过比较结果对象与原始对象来validation序列化和反序列化例程。 例程可以序列化任意和深度嵌套的类,因此我想要一个比较例程,可以给出原始和最终实例,并反过来遍历每个值类型并比较值,并迭代地潜入引用类型以比较值。 我已经尝试过Apache Commons Lang EqualsBuilder.reflectionEquals(inst1, inst2)但这似乎没有进行非常深入的比较,它只是比较参考类型的相等性,而不是深入研究它们: 以下代码说明了我的问题。 对reflectionEquals的第一次调用返回true,但第二次返回false。 是否有人可以推荐的图书馆例程? class dummy { dummy2 nestedClass; } class dummy2 { int intVal; } @Test public void testRefEqu() { dummy inst1 = new dummy(); inst1.nestedClass = new dummy2(); inst1.nestedClass.intVal = 2; dummy inst2 = new dummy(); inst2.nestedClass = new dummy2(); inst2.nestedClass.intVal = 2; boolean isEqual = EqualsBuilder.reflectionEquals(inst1.nestedClass, […]

Java:调用hashCode()和equals()时自动抛出UnsupportedOperationException的干净方法?

我们有一个OO代码库,在很多情况下hashcode()和equals()根本不起作用,主要是由于以下原因: 除非您愿意放弃面向对象抽象的好处,否则无法扩展可实例化的类并在保留equals合同的同时添加值组件。 这是Joshua Bloch撰写的“Effective Java”的引用,在这篇伟大的Artima文章中有关于该主题的更多内容: http://www.artima.com/lejava/articles/equality.html 我们完全没问题,这不是这个问题的意思。 问题是:看到事实是在某些情况下你不能满足equals()契约,自动生成hashcode()和equals()的干净方法会抛出UnsupportedOperationException吗? 注释会起作用吗? 我正在考虑像@NotNull这样的事情:每个@NotNull合同违规都会自动抛出一个exception,除了用@NotNull注释你的参数/返回值之外别无他法。 它很方便,因为它是8个字符(“@NotNull”)而不是不断重复相同的validation/抛出exception代码。 在我关注的情况下,在hashCode()/equals()没有意义的每个实现中,我们总是重复相同的事情: @Override public int hashCode() { throw new UnsupportedOperationException( “contract violation: calling hashCode() on such an object makes no sense” ); } @Override public boolean equals( Object o ) { throw new UnsupportedOperationException( “contract violation: calling equals() on such an object makes no sense” […]

我如何表达两个值彼此不相等?

是否存在类似于equals()的方法表示“不等于”? 我想要完成的一个例子如下: if (secondaryPassword.equals(initialPassword)) { JOptionPane.showMessageDialog(null, “You’ve successfully completed the program.”); } else { secondaryPassword = JOptionPane.showInputDialog(null, “Your passwords do not match. Please enter you password again.”); } 我试图找到一些不需要我使用的东西if ( a != c) 。

我们应该总是超越平等吗?

在编写自己的类时,是否总是需要重写equals(Object o) ? 如果我不这样做,它会自动检查所有字段是否相同? 或者只是检查两个变量是否指向同一个对象?

Java:为方便起见,在equals()中使用hashCode()?

考虑以下测试用例,将equals中的hashCode()方法用作方便的快捷方式是一种不好的做法吗? public class Test { public static void main(String[] args){ Test t1 = new Test(1, 2.0, 3, new Integer(4)); Test t2 = new Test(1, 2.0, 3, new Integer(4)); System.out.println(t1.hashCode() + “\r\n”+t2.hashCode()); System.out.println(“t1.equals(t2) ? “+ t1.equals(t2)); } private int myInt; private double myDouble; private long myLong; private Integer myIntObj; public Test(int i, double d, long l, […]

java.lang.Comparable和equals

如果我为类实现java.lang.Comparable ,我还是要重写equals()方法吗? 或者Comparable能equals工作吗? 如果答案是否定的 ,那么如果出现一些差异怎么办? 假设我在equals()方法中将两个对象称为相等的方式与我在compareTo()中将两个相同类的对象称为相等的方式不同。 而且,如果我实现Comparable ,我还必须覆盖equals()吗?

为case类的equals / hashCode方法生成了什么代码?

我有一些Java代码,我正在翻译成Scala。 代码由一些不可变的类组成,这些类符合Scala中的case class的目的。 但我不想引入错误,因此我想确保为equals和hashCode生成的代码/行为与当前实现等效。 我已经查看了“Scala编程”,但它只是说 第三,编译器将方法的“自然”实现添加到String,hashCode,并且等于你的类。

关于平等的最佳做法:过载还是不过载?

请考虑以下代码段: import java.util.*; public class EqualsOverload { public static void main(String[] args) { class Thing { final int x; Thing(int x) { this.x = x; } public int hashCode() { return x; } public boolean equals(Thing other) { return this.x == other.x; } } List myThings = Arrays.asList(new Thing(42)); System.out.println(myThings.contains(new Thing(42))); // prints “false” } […]