【问题标题】:how to compare date array values如何比较日期数组值
【发布时间】:2014-01-29 11:32:03
【问题描述】:

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

2014 年 1 月 29 日星期三 00:18:48 GMT

当我比较它们时

    date1[1]==date1[2]

它返回 false。

完全混乱。为什么当它们是相同的值时会发生这种情况。

【问题讨论】:

  • 你能显示完整的代码吗?数组的类型是什么??是String 还是Date 对象?
  • 日期 date1=new date1[2];
  • @Keerthana 检查Object 是否相等的方法太糟糕了。
  • date[1].getTime()==date[2].getTime() 是你要找的。​​span>
  • @RuchiraGayanRanaweera 不,这不是一个坏方法。如果你想检查两个引用是否相等,你会怎么做? OP 在equals== 之间感到困惑。

标签: java arrays date time


【解决方案1】:

为了让你理解,如果是Date数组,那么Date对象应该使用比较

Date.compareTo(Date arg)

如果是一个包含日期的字符串数组,那么应该使用比较

String.equals(String arg)

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

【讨论】:

  • 换句话说,在对象之间使用== 可以判断两个引用是否指向同一个对象,同一个内存块。使用==比较存储在两个对象中的数据的内容。如果这没有意义,请学习一些基本的 Java 教程。
【解决方案2】:

对象类型的比较如下:

object1.equals(object2)

只有原语(不是它们的包装对象类型)与“==”运算符进行比较。

但是,如果您想知道一个对象是否完全相同(内存中的地址相同,引用相同),您应该使用“==”运算符。

【讨论】:

    【解决方案3】:
    date1[1].equals(date1[2])
    

    == 检查引用是否相同。你需要equals,因为你想比较内容。

    【讨论】:

      【解决方案4】:

      对对象使用equals方法

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

      【讨论】:

        【解决方案5】:

        请改用数值作为日期。它们更可靠,尤其是在涉及不同的日期子类时。

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            同样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");
                }
            

            【讨论】:

              【解决方案8】:

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

              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

              如果要比较2个对象的内容,必须使用equals()方法:

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

              将显示Hello

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

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

              【讨论】:

              • 事实上,这不是事实。您显示的第一个字符串比较将打印“Hello”。这是因为一些优化。由于这两个字符串完全相同,因此它们仅在内存中保存一次,并且它们的引用相同。尝试运行它,你会看到。
              • 是的,你是对的。很抱歉造成混乱。我编辑了我的帖子以提供更好的示例。这里JVM没有优化。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-12-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多