Мне просто интересно. Я хотел бы знать, если есть конкретная причина, почему выражение«var & = expr» не ведет себя как «var = var && expr»
var &= expr
не ведет себя так же, как
var = var && expr.
Похоже, что выражение в первой в настоящее время выполняется независимо от false значение var.
Я использую Java 6, FYI. Этот код:
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)
Реф. http://stackoverflow.com/questions/7101992/why-do-wually-use-not-what-is-the-difference, http://stackoverflow.com/questions/9264897/reason-for-the- exsistance-of-non-short-circuit-logical-operator, http://stackoverflow.com/questions/4014535/vs-and-vs – 2013-03-08 22:48:46