Answers:
string == null
比较该对象是否为null。 string.equals("foo")
比较该对象内部的值。 string == "foo"
并不总是有效,因为您试图查看对象是否相同,而不是它们代表的值。
更长的答案:
如果您尝试这样做,它将无法正常工作,因为您已经发现:
String foo = null;
if (foo.equals(null)) {
// That fails every time.
}
原因是foo为null,所以它不知道什么是.equals。没有对象可以调用.equals。
您可能想要的是:
String foo = null;
if (foo == null) {
// That will work.
}
在处理字符串时,防止出现null的典型方法是:
String foo = null;
String bar = "Some string";
...
if (foo != null && foo.equals(bar)) {
// Do something here.
}
这样,如果foo为null,则不会评估条件的后半部分,一切都很好。
如果使用的是字符串文字(而不是变量),则简单的方法是:
String foo = null;
...
if ("some String".equals(foo)) {
// Do something here.
}
如果要解决此问题,Apache Commons会提供一个StringUtils类,该类提供空安全的String操作。
if (StringUtils.equals(foo, bar)) {
// Do something here.
}
另一个回应是在开玩笑,说你应该这样做:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
请不要那样做。您只应为异常错误抛出异常;如果期望空值,则应提前检查它,而不要让它引发异常。
在我看来,有两个原因。首先,例外很慢;检查null的速度很快,但是当JVM引发异常时,这会花费很多时间。其次,如果您只是提前检查空指针,则代码更易于阅读和维护。
如果您在Android中工作,请使用TextUtils方法。
TextUtils.isEmpty(str):如果字符串为null或长度为0,则返回true。参数:str要检查的字符串返回:如果str为null或零长度,则返回true
if(TextUtils.isEmpty(str)) {
// str is null or lenght is 0
}
下面是此方法的源代码。您可以使用direclty。
/**
* Returns true if the string is null or 0-length.
* @param str the string to be examined
* @return true if str is null or zero length
*/
public static boolean isEmpty(CharSequence str) {
if (str == null || str.length() == 0)
return true;
else
return false;
}
如果我们查看equalsIgnoreCase方法的实现,则会发现这一部分:
if (string == null || count != string.count) {
return false;
}
因此,false
如果参数为,它将始终返回null
。这显然是正确的,因为它唯一应返回的情况true
是在上调用equalsIgnoreCase时null String
,但是
String nullString = null;
nullString.equalsIgnoreCase(null);
肯定会导致NullPointerException。
因此,equals方法并不是为了测试对象是否为null而设计的,仅仅是因为您不能在上调用它们null
。
这看起来有些奇怪,但是...
stringName == null || "".equals(stringName)
这样从来没有任何问题,而且这是一种更安全的检查方式,同时避免了潜在的空点异常。
我不确定MYYN的答案出了什么问题。
if (yourString != null) {
//do fun stuff with yourString here
}
上面的空检查是完全可以的。
如果您要检查一个String引用是否等于(忽略大小写)与您知道不是null引用的另一个字符串相等,请执行以下操作:
String x = "this is not a null reference"
if (x.equalsIgnoreCase(yourStringReferenceThatMightBeNull) ) {
//do fun stuff
}
如果对正在比较的两个字符串是否都具有空引用存有疑问,则需要检查其中至少一个是否为空引用,以避免NullPointerException的可能性。
如果您的字符串的值为“ null”,则可以使用
if(null == stringName){
[code]
}
else
[Error Msg]
当然user351809 stringname.equalsignorecase(null)
会抛出NullPointerException。
看到,您有一个字符串对象stringname
,它遵循2个可能的条件:
stringname
具有一些非空的字符串值(例如“ computer”):"computer".equalsignorecase(null)
false
。stringname
具有一个null
值:null.equalsignorecase(null)
true
,null
它不是可以执行该equalsignorecase()
方法的对象。因此,由于情况2,您将获得例外。
我建议您仅使用stringname == null
我知道很久以前就已经回答了这个问题,但是我还没有看到这个帖子,所以我想分享一下我的工作。这对代码的可读性不是特别好,但是如果您必须进行一系列空检查,我喜欢使用:
String someString = someObject.getProperty() == null ? "" : someObject.getProperty().trim();
在此示例中,在字符串上调用trim,如果字符串为null或空格,则会抛出NPE,但是在同一行上,您可以检查null还是空白,因此不会以一吨(更多)很难格式化(如果有块)。
如果我正确理解,应该这样做:
if(!stringname.isEmpty())
// an if to check if stringname is not null
if(stringname.isEmpy())
// an if to check if stringname is null
有两种方法可以做到。.说String == null或string.equals() ..
public class IfElse {
public int ifElseTesting(String a){
//return null;
return (a== null)? 0: a.length();
}
}
public class ShortCutifElseTesting {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("enter the string please:");
String a=scanner.nextLine();
/*
if (a.equals(null)){
System.out.println("you are not correct");
}
else if(a.equals("bangladesh")){
System.out.println("you are right");
}
else
System.out.println("succesful tested");
*/
IfElse ie=new IfElse();
int result=ie.ifElseTesting(a);
System.out.println(result);
}
}
检查此示例。.这是If Else的另一个快捷方式示例。