== null 和.equals("null") 有区别吗?

Is there any difference between == null and .equals("null")?

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

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

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

谁能告诉我

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

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

?

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

的字符串进行比较

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

差别很大...

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

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

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

在您的特定情况下,实际上是检查 validFolderRow.getBondTAFolderType() 方法 returns 空响应(无),方法是查看变量是否实际上根本没有指向内存位置,并且然后如果不是这种情况,它会检查它是否 returns 一个包含字符序列 null.

的字符串
validFolderRow.getBondTAFolderType() == null 

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

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

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

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

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

当然有

null 在技术上不是字符串;

"null" 是一个字符串。

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

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

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