A logical OR operator '|' and a logical AND '&' operator evaluates both the expressions and therefore java compiler throws a nullpointerException while evaluating the 's.length()' statement as s is set to null. But in a short Circuited(&&) operator if the 1st condition is true it evaluates the next condition and gives the exception but in a short circuited (| |) operator if the first condition is true the it dosnt evaluate the next condition hence the exception is not thrown.
Refer Short Circuit operators (| | ,&&),in these operators ,decision to execute the second expression is based on the result of the first one. Normal operators (&,|)will evaluate both the expressions. At line 2, s.length() is evaluated and results in exception. At line 4,s.length() is not evaluated because the first one is false. At line 6,s.length() is evaluated as the first expression is false. At line 8,s.length() is evaluated.