使用if语句通过使用String = null或String.isEmpty()检查字符串是否为空时有什么区别吗?
即:
public String name;
if(name == null)
{
//do something
}
或
public String name;
if(name.isEmpty())
{
//do something
}
如果有任何不同(包括性能问题),请告诉我。
答案 0 :(得分:38)
空字符串是一个长度为零的字符串。 null值根本没有字符串。
s == null
将返回false
。NullPointerException
。这是一个显示差异的表格:
+-------+-----------+----------------------+
| s | s == null | s.isEmpty() |
+-------+-----------+----------------------+
| null | true | NullPointerException |
| "" | false | true |
| "foo" | false | false |
+-------+-----------+----------------------+
答案 1 :(得分:1)
isEmpty()
检查空字符串""
,
如果您在NullPointerException
实例
isEmpty()
,它会抛出null
答案 2 :(得分:1)
变量name
不是String。它是String的引用。
因此,空检查确定name
实际引用 String
。如果是,那么(并且只有那时)你可以进行进一步的检查以确定它是否为空。即。
String name = null; // no string
String name = ""; // an 'empty' string
是两种不同的情况。请注意,如果您不首先检查nullness,那么您将尝试在空引用上调用方法,那就是当您遇到可怕的NullPointerException
答案 3 :(得分:1)
使用“”赋值的字符串,不包含任何值但为空(length = 0),未实例化的字符串为空。
答案 4 :(得分:0)
如果您应用此代码:
if(name.isEmpty())
{
//do something
}
当name
为空时,您将获得NullPointerException
。
null
检查一般会显示是否有物体
isEmpty
检查会显示现有 String
对象的内容是否为空。
答案 5 :(得分:0)
查看java版本的源代码。
例如,在openjdk-7中:http://www.docjar.com/html/api/java/lang/String.java.html
119 /** The count is the number of characters in the String. */
120 private final int count;
663 /**
664 * Returns <tt>true</tt> if, and only if, {@link #length()} is <tt>0</tt>.
665 *
666 * @return <tt>true</tt> if {@link #length()} is <tt>0</tt>, otherwise
667 * <tt>false</tt>
668 *
669 * @since 1.6
670 */
671 public boolean isEmpty() {
672 return count == 0;
673 }
答案 6 :(得分:0)
isEmpty检查字符串“”。 最佳做法是检查:
if (str != null && !str.isEmpty() {
// process string
}
答案 7 :(得分:0)
这周我在修改一些旧的JaVa代码时遇到了这个问题,我在这里了解到我必须始终进行所有这些检查。答案的确是正确的,但是每次都很难记住,因此我决定通过一个简单的调用就为我做一个小功能。
这是什么,您总会得到想要的答案:
public boolean StringIsNull(String pi_sChaine)
{ boolean bTrueOrFalse = true;
if (pi_sChaine == null || pi_sChaine.isEmpty())
{ bTrueOrFalse = true; }
else
{ bTrueOrFalse = false; }
return bTrueOrFalse;
}