본문 바로가기

Dev-/Java

자바 논리연산자 &, |와 &&, ||의 차이

많은 자바개발자들이 아래와 같이 논리연산자를 무의식적으로 2개씩 사용한다.

if (A && B) { ... }
if (A || B) { ... }


사실 아래와 같이 하나만 사용해도 된다.

if (A & B) { ... }
if (A | B) { ... }


두개의 차이는 무엇일까..?


A라는 앞의 조건을 검사 한 후,

최종 결과가 B와는 상관이 없을 때, 그럼에도 B를 판별(&, |)해보느냐, 스킵해주냐(&&, ||)의 차이다.



별거 아니지만 소소하게 불필요한 코드를 줄일 수 있다.

뭐가 더 좋은건 아니라고 한다.

(cf. 자바스크립트도 동일한 것으로 알고 있다.)



아래 참고

/** null --> Student의 name에 null을 집어넣었다. */
Student student = new Student(1, null, "dd");

/**
* 앞 연산이 true이므로, 뒷 연산이 필요하지 않다.
*
* 뒷 논리 Integer.parseInt(student.getName() == 1)에서
* NullPointException의 발생유무를 비교해보면
*
* | --> NullPointException의 발생!!!!
* || --> NullPointException이 발생하지 않는다.
*/
if (student.getName() == null || Integer.parseInt(student.getName()) == 1)
System.out.println("!!!!!");


코드를 짜다보면 의미없이 if()안에 if()안에 if()를 계속 집어넣어야 할것 같은 경우가 많은데,

위 내용을 알고 본다면, ||가 단순 나열이 아님을 알게되고 조금 더 좋은 방법이 떠오를 것이다.