[JAVA] &와 &&의 차이

목표

'&'와 '&&'의 차이를 명확하게 알고 사용할 수 있다.

개념

if (a & b & c)		// 모든 조건(a, b, c)를 판별한다.
if (a && b && c) 	// 선행 조건(a)가 false이면 후행 조건(b,c)는 판별하지 않는다.
위 개념은 OR 연산자 |과 ||에도 적용된다.

활용

Null 객체의 멤버변수 판별하기

case1) & 사용

User user = null;

if (user != null & user.getName().equals("")) { // NullPointException
	//...
}

NPE 에러가 발생한다.
user 객체가 null이어도 getName() 메서드를 실행하기 때문이다.

위 코드에서 NPE 에러를 발생시키지 않으려면,
다음과 같이 equals 메서드의 실행 주체를 바꿔줘야 한다.

if (user != null & "".equals(user.getName())

case2) && 사용

User user = null;

if (user != null && user.getName().equals("")) {
	//...
}

NPE 에러가 발생하지 않는다.
user 객체가 null 이면 getName() 메서드를 실행하지 않기 때문이다.