我只是好奇。我想知道这句话有没有特定的原因
var &= expr的行为方式与
var = var && expr.它看起来像是执行第一个表达式,而不管var上的值是假的。
我正在使用Java 6,仅供参考。这段代码:
public class Test
{
protected static String getString()
{
return null;
}
public static void main(String... args)
{
String string = getString();
boolean test = (string != null);
test = test && (string.length() > 0);
System.out.println("First test passed");
test &= (string.length() > 0);
System.out.println("Second test passed");
}
}给了我:
First test passed
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)发布于 2013-03-09 06:39:42
它看起来像是执行了第一个表达式,而不管
上的值是假的。
这是因为第二个表达式使用短路求值,而第一个表达式不使用。
发布于 2013-03-09 06:39:21
它们是不同的,因为&是按位运算符,而&&是布尔值上的逻辑运算符。
var &= expr等同于var = var & expr,而不是var = var && expr。
发布于 2013-03-09 06:45:17
在你的情况下
test = test && (string.length() > 0); // test = false that why strings.length not evaluated
test &= (string.length() > 0); //calling length on null object that why NPEhttps://stackoverflow.com/questions/15304527
复制相似问题