我对以下代码感到困惑。为什么它与==
和equals
方法相比?
(validFolderRow.getBondTAFolderType() == null || validFolderRow.getBondTAFolderType().equals("null"))
What's the difference between equals() and ==?
任何人都可以告诉我
之间有什么区别validFolderRow.getBondTAFolderType() == null
和
validFolderRow.getBondTAFolderType().equals("null")
答案 0 :(得分:9)
validFolderRow.getBondTAFolderType() == null
与null
进行比较(即检查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()
比较内容。