== null和.equals(“null”)之间有什么区别吗?

时间:2015-06-01 09:35:37

标签: java string equals

我对以下代码感到困惑。为什么它与==equals方法相比?

(validFolderRow.getBondTAFolderType() == null || validFolderRow.getBondTAFolderType().equals("null"))

What's the difference between equals() and ==?

任何人都可以告诉我

之间有什么区别
validFolderRow.getBondTAFolderType() == null

validFolderRow.getBondTAFolderType().equals("null")

5 个答案:

答案 0 :(得分:9)

validFolderRow.getBondTAFolderType() == nullnull进行比较(即检查validFolderRow.getBondTAFolderType()是否为空)。 validFolderRow.getBondTAFolderType().equals("null")validFolderRow.getBondTAFolderType()与值为"null"的字符串进行比较。

请注意,必须先进行首次比较,因为如果validFolderRow.getBondTAFolderType()为空,则无法在其上调用equals(因为它会抛出NullPointerException)。由于||是一个短路运算符,因此将第一个操作数计算为true将阻止对第二个操作数进行求值。

答案 1 :(得分:1)

存在巨大差异......

.equals()调用理论上可以覆盖的方法,并且在String的情况下比较内存中字符串的内容,它会检查每个变量是否包含相同的字符序列。

==检查变量是否指向内存中的相同位置。

在很多情况下,对两个String变量的==检查将评估为false,即使字符串包含相同的字符

在你的特定情况下,实际上是检查validFolderRow.getBondTAFolderType()方法返回空响应(Nothing),通过查看teh变量是否实际上根本没有指向内存位置,然后如果不是case检查它是否返回包含字符序列null的字符串。

答案 2 :(得分:0)

validFolderRow.getBondTAFolderType() == null 

检查getBondTAFolderType()返回的引用是否为null

validFolderRow.getBondTAFolderType().equals("null")

检查getBondTAFolderType()返回的字符串是否等于字符串“null”。这类似于

String nullString = "null";
validFolderRow.getBondTAFolderType().equals(nullString);

答案 3 :(得分:0)

validFolderRow.getBondTAFolderType() == null - > comparesto null。 validFolderRow.getBondTAFolderType().equals("null") - >如果validFolderRow.getBondTAFolderType()为null,那么您将获得NPE,因为您无法在空引用上执行方法。

答案 4 :(得分:0)

当然有。

null在技术上不是字符串;

"null"是一个字符串。

如果你想比较这两种情况,你可能需要

String folderType = validFolderRow.getBondTAFolderType();
if(folderType != null && !"null".equals(folderType)) {
    ...
}

当然还有==比较引用,而.equals()比较内容。