자바는 SCE(Short-Circuit Evaluation)연산을 한다. 즉 최단거리연산. 

 

&& 연산자 같은경우 앞 연산에서 false 가 나올경우 뒤에는 볼것도 없이 false 를 최종적으로 반환하기 때문에 뒤의 연산을 하지 않는다. 앞 연산에서 true 를 반환한다면 뒤에 연산에서 false 를 반환할수 있기때문에 뒤에 연산도 하여야한다.

 

|| 연산자 같은경우 또는 이라는 의미로써 앞에 연산에서 true 가 나온다면 어쨋든 결과적으로 true 가 나오므로 뒤에 연산을 하지 않는다. 하지만 앞에 연산이 false가 나오면 뒤에 연산에서 true 가 나올지도 모르므로 뒤에 연산도 하여야 한다.

 

아래 코드를 보면 쉽게 알수있다.

		int var1 = 0;
		int var2 = 0;
		boolean result;

		result = (var1+=10) < 0 && (var2+=10) > 0;
		System.out.println(result);
		System.out.println("var1 = " + var1);
		System.out.println("var1 = " + var2);
		
		result = (var1+=10) > 0 || (var2+=10) > 0;
		System.out.println(result);
		System.out.println("var1 = " + var1);
		System.out.println("var1 = " + var2);

결과값
false
var1 = 10
var1 = 0
true
var1 = 20
var2 = 0



http://en.wikipedia.org/wiki/Short-circuit_evaluation