많은 자바개발자들이 아래와 같이 논리연산자를 무의식적으로 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()를 계속 집어넣어야 할것 같은 경우가 많은데,
위 내용을 알고 본다면, ||가 단순 나열이 아님을 알게되고 조금 더 좋은 방법이 떠오를 것이다.
'Dev- > Java' 카테고리의 다른 글
logger 변수 private static final 선언이유? (2) | 2019.03.25 |
---|---|
얕은 복사 (0) | 2019.03.06 |
싱글톤 객체 성능 향상 --> LazyHolder 사용 (0) | 2019.02.28 |
DB에 저장된 DATE, DATETIME 타입의 시간부분이 나오지 않을 때.. (TimeStamp) (0) | 2018.09.16 |
@SuppressWarning란? (0) | 2018.09.07 |