0

我的日期格式会根据某些条件发生变化,为了获得全局访问权限,我将它们初始化,然后根据条件分配一个值。

但是看看调试器,这些值没有被重新分配,它们在初始化时保持为空。

我是 java 新手,导致这种情况的分配行为是什么?

这是代码:

SimpleDateFormat df     = null;
        SimpleDateFormat df2    = null;
        SimpleDateFormat date_c = null;
        SimpleDateFormat t      = null;
        SimpleDateFormat t2     = null;
        SimpleDateFormat df5    = null;
        SimpleDateFormat df3    = null;

        if ( make == "NCR")
        {
        df     = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
        df2    = new SimpleDateFormat("yyyyMMddHHmmss");
        date_c = new SimpleDateFormat("yyyyMMdd");
        t      = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
        t2     = new SimpleDateFormat("yyyyMMddHHmmss");
        df5    = new SimpleDateFormat("yyyyMMddHHmmss");
        df3    = new SimpleDateFormat("yyyyMMddHHmmss");
        }

        else if ( make == "WINCORE")
        {
            df     = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
            df2    = new SimpleDateFormat("yyyyMMddHHmmssS");
            date_c = new SimpleDateFormat("yyyyMMdd");
            t      = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
            t2     = new SimpleDateFormat("yyyyMMddHHmmssS");
            df5    = new SimpleDateFormat("yyyyMMddHHmmssS");
            df3    = new SimpleDateFormat("yyyyMMddHHmmssS");
        }
4

2 回答 2

3

因为两个条件都不满足。您==用于字符串比较,这很可能是一个错误。==比较对象的身份,字符串是对象。对于基于值的比较,您应该使用equals. 将文字放在左边会给你一个null安全的比较(这是一个常见的 Java 习惯用法):"NCR".equals(make). 但是您也可以使用make.equals("NCR")if makeis notnull或 you want NullPointerExceptionfor null make

比较以下内容:

assert "NCR" == "NCR" : "String literals are interned, so they have the same identity";
assert "NCR" != new String("NCR") : "String with the same value but not the same identity"; 
assert "NCR".equals(new String("NCR")) : "But they are equal";
于 2013-07-03T11:58:52.057 回答
2

在java中比较字符串时,你不使用==,你使用equals()

if ("NCR".equals(make))
 ...
else if ("WINCORE".equals(make))

另外,将字符串文字放在第一位,以防万一,这样您makenull不会得到NullPointerException.

于 2013-07-03T12:02:31.723 回答