请帮我怎么做与空值的Java工作string.equals? 是有一些问题的例外? 三种情况:
boolean result1,result2, result3;
//1st case
String string1 = null;
String string2 = null;
result = string1.equals(string2);
//2nd case
String string1 = "something";
String string2 = null;
result2 = string1.equals(string2);
//3rd case
String string1 = null;
String string2 = "something";
result3 = string1.equals(string2);
什么样的结果的值? 我希望这个值:
RESULT1是真实的;
RESULT2是假的;
result3是假的;
不能使用反引用(点“”)运算符可以访问实例变量或调用方法上来说,如果该实例为null
。 这样做将产生一个NullPointerException
。
这是常见的做法是使用你知道非空的字符串比较的东西。 例如, "something".equals(stringThatMayBeNull)
事实上,你不能用一个点运算符null
变量调用非静态方法。
尽管这样,一切都取决于重写equals()
的方法Object
类。 在的情况下String
类,是:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
如果传递null
作为参数,无论是“如果”会失败,返回false
;
对于你的情况的替代方案是建立一个方法,你的要求:
public static boolean myEquals(String s1, String s2){
if(s1 == null)
return s2 == null;
return s1.equals(s2);
}
使用Objects.equals()
比较字符串,或者如果你正在使用JDK 7或更高版本的任何其他对象。 它会处理空值,而不抛出异常。 查看更多在这里: 如何-DO-I-比较串式的Java
这段代码会抛出一个NullPointerException
时string1为空,调用equals
就可以了,因为是当一个方法调用隐含任何空对象的情况。
要检查是否字符串为空,则使用==
而不是equals
。
虽然result1
和result3
不会设置由于NullPointerExceptions的,结果2会是假的(如果你运行它的其他结果的上下文之外)。
您将在例1和例3得到一个NullPointerException。
你不能调用任何方法(如equals()
)一个空的对象。
为了防止NPE而比较字符串,如果其中至少有一个可以为空,使用StringUtils.equals方法是空安全。
我们不能用点运算符与空,因为这样做会给NullPointerException异常。 因此,我们可以在我们的节目try..catch块的优势。 这是解决你的问题的一种非常原始的方式,但你会得到所需的输出。
try {
result = string1.equals(string2);
} catch (NullPointerException ex) {
result = string2 == null; //This code will be executed only when string 1 is null
}