2014-01-29 33 views
0

我有日期数组存储日期和时间。它有两个值。两者都是一样的。如何比较日期数组值

周三01月29日零时18分48秒格林尼治标准时间2014

当我比较他们

date1[1]==date1[2] 

返回false。

完全混淆。为什么它们在相同的价值观时发生。

+1

你能显示完整的代码吗?数组的类型是什么?它是'String'还是'Date'对象? –

+0

日期date1 =新日期1 [2]; – Keerthana

+0

@Keerthana太糟糕的方式来检查对象的平等。 –

回答

2

为了让你明白,如果它是一个Date阵列,然后Date对象应使用

Date.compareTo(Date arg) 

如果它是一个包含日期的字符串数组进行比较的话,应该比较使用

String.equals(String arg) 

==是用于检查相等性的条件测试操作符。这通过比较左侧和右侧操作数中的实际值来进行相等性测试。所以,这应该只用于测试原始值的相等性。因此,它表示避免使用==关于对象类型的测试相等性

+1

换句话说,在对象之间使用'=='可以告诉两个引用是否指向同一个对象,即同一块内存。使用'=='不会*比较存储在两个对象内的数据的内容。如果这没有意义,请查阅一些基本的Java教程。 –

1

要比较Date您可以使用before()after()方法在Java.util.Date

同样Date也是Java对象,所以你可以使用equals()

Date date1=new Date(); 
    Date date2=new Date(); 

    if(date1.before(date2)){ 
     System.out.println("date1 before date2"); 
    } else if(date1.after(date2)){ 
     System.out.println("date1 after date2"); 
    } else if(date1.equals(date2)){ 
     System.out.println("date1 and date2 equals"); 
    } 
1

对象类型这样的比较:

object1.equals(object2) 

只有原语(不是他们的包装的对象类型)是与“==”运算符相比较。然而,如果你想知道一个对象是否完全相同的对象(内存中的相同地址,相同的引用),你应该使用“==”运算符。

1
date1[1].equals(date1[2]) 

==检查参考是否相同。你需要等于,因为你想比较内容。

1

使用equals的对象

date1[1].equals(date1[2]) 
1

方法使用的数值的日期来代替。它们更可靠,尤其是涉及不同的日期子类时。

date[1].getTime()==date[2].getTime() 
1

很难建议你没有看到整个代码,但我认为你必须使用方法equals()或类似的东西。当您在非基元类型上使用operator ==时,您正在比较引用,而不是值。

1

运算符==比较对象的引用。例如:

public static void main(String[] args) { 
    StringBuilder s = new StringBuilder(); 
    s.append("Hello"); 
    if(s.toString() == "Hello") 
     System.out.println(s); 
} 

将不显示任何内容。您可以使用==比较原语类型:

int i = 5; 
if(i == 5) 
    System.out.println(i); 

这将显示5

如果你想两个对象的内容进行比较,你必须使用equals()方法:

String s = "Hello"; 
if(s.equals("Hello")) 
    System.out.println(s); 

将显示Hello

确保对象的类别覆盖equals()hashCode()

如果您的目标是比较对象,最好的方法是调用compareTo(),但是您的类必须实现Comparable接口。

+0

实际上这不是事实。您显示的第一个字符串比较将打印出“Hello”。这是因为一些优化。由于这两个字符串完全相同,因此它们只在内存中保留一次,并且它们的引用是相同的。尝试运行它,你会看到。 – tzima

+0

是的,你是对的。对此感到抱歉。我编辑了我的帖子,以举一个更好的例子。这里JVM不会优化。 – Happy