我的日期格式根据特定条件而变化,为了具有全局访问权限,我将其初始化,然后根据条件分配值。
但是看看De-bugger这些值没有被重新分配,它们按照初始化保持为空。
我是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");
}
答案 0 :(得分:3)
因为两个条件都不满足。您使用==
进行字符串比较,这很可能是一个错误。 ==
比较对象 identity ,字符串是对象。对于基于价值的比较,您应该使用equals
。将文字放在左边会给你一个null
- 安全比较(这是一个常见的Java习语):"NCR".equals(make)
。但如果make.equals("NCR")
不是make
,或者您希望null
NullPointerException
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";
答案 1 :(得分:2)
比较java中的字符串时,不使用==
,使用equals()
if ("NCR".equals(make))
...
else if ("WINCORE".equals(make))
另外,如果make
为null
,请先将字符串文字放在第一位,这样就不会得到NullPointerException
。