== 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() == null
与 null
进行比较(即检查 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()
比较内容。
我对下面的代码感到困惑。为什么它与 ==
和 equals
方法比较?
(validFolderRow.getBondTAFolderType() == null || validFolderRow.getBondTAFolderType().equals("null"))
What's the difference between equals() and ==?
谁能告诉我
有什么区别validFolderRow.getBondTAFolderType() == null
和
validFolderRow.getBondTAFolderType().equals("null")
?
validFolderRow.getBondTAFolderType() == null
与 null
进行比较(即检查 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()
比较内容。