我的日期格式会根据某些条件发生变化,为了具有全局访问权限,我初始化它们,然后根据条件分配一个值。
但是查看 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");
}
最佳答案
因为两个条件都不满足。您使用 ==
进行字符串比较,这很可能是一个错误。 ==
比较对象身份,字符串是对象。对于基于值的比较,您应该使用equals
。将文字放在左侧可提供 null
安全比较(这是常见的 Java 习惯用法):"NCR".equals(make)
。但如果 make
不是 null
或者您想要 NullPointerException
,您也可以使用 make.equals("NCR")
对于 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";
关于java - java 空赋值行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17447291/