Eclipse在比较两个相同的表达式时会显示警告:
if (1 == 1) -> warning
if (a == a) -> warning
然而,对于
null == null
(尽管 null == null
总是成立),不会显示任何警告:if (null == null) -> no warning
这是有什么原因吗?
考虑一下这个警告条件试图防止什么。它的目的是警告您,您没有比较您打算比较的两个变量,例如由于拼写错误(例如foo == foo
,当您想说的是foo == boo
或foo == fpp
),或者两个字面值(例如1 == 1
)。
(当然,比较两个字面值会出现不同的问题-结果总是相同的,在代码中应该简化为true
或false
。)
null == null
不是潜在问题的情况。如果您将变量命名为类似于“null”的名称,然后错误地写入“null”,那么您就有了一个完全不同的问题,编译器无法猜测。
对于像 int 和 char 这样的原始类型,编译器已知其值。您可以将它们进行比较,如果它们相同,便会立即引发警告。
例如:
'A' == 'A'
或者:
'A' == 97
null == null
或者
"abc" == "abc"
null
标识着一个不存在的对象(尽管如此,仍然是一个对象),因此仍需要进行比较。 - Laurensa
和1
有状态而null
是状态的缺失吗? - Yassin Hajaj