"var &= expr" does not behave like "var = var && expr"
compilation, java
Solution
`&` does not behave like `&&`1,2
`&` is an eager bitwise/boolean-And.
`&&` is a short-circuiting logical-And.
1 The line with `&=` is equivalent to `test = test & (string.length() > 0)`, which would also fail.
2 See Why do we usually use `||` not `|`, what is the difference? - the answers also cover the use of `&&` and `&`.
Problem
I'm just curious. I would like to know if there is a specific reason why the expression ``` var &= expr ``` does not behave the same way as ``` var = var && expr. ``` It looks like the expression in the first one is being executed regardless of a false value on var. I'm using Java 6, FYI. This code: ``` 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"); } } ``` Gives me: ``` 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) ```