논리 값에 대한 연산처리를 하는 연산자
1. and 연산자 -> &&
System.out.println(false && true); // return false
&&연산자는 양 옆이 다 true여야만 true를 출력한다.
2. or 연산자 -> ||
System.out.println(true || false); // return true
||연산자는 양 옆 중 하나만 true여도 true를 출력한다.
3. not 연산자 -> !
System.out.println(!true); // return false
!연산자는 반대를 출력해준다.
4. 연산 규칙
- 양 옆은 논리만
- and : 연산 과정 중 false가 존재하면 무조건 false
- or : 연산 과정 중 true가 존재하면 무조건 true
- 해당 논리 뒤에 연산은 실행하지 않음
int a = 0;
System.out.println(false && (++a > 0));
System.out.println(a);
해당 식에선 (++a >) 0은 논리가 아니지만 (++a >) 0가 true를 출력하기 때문에 가능하다.
이클립스 상에선 뒤에 (++a > 0) 부분에 노란 밑줄이 그이는데 해당 부분이 dead code기 때문이다.
dead code = 있든 없든 연산에 영향을 미치지 않아서 실행되지 않는 죽은 코드
출력문에서 &&연산식 앞에 이미 false가 있기 때문에 뒤에 뭐가 오든 상관없이 false가 출력된다.
그렇기에 뒤에 연산식은 실행되지 않는 데드 코드가 된다.
(++a > 0)가 실행되지 않았기 때문에 a를 출력하면 0이 나오게 된다.
'Java' 카테고리의 다른 글
리터럴(literal) / 기본 타입(primitive type) / 참조 타입(reference type) / 메모리 영역 (0) | 2023.01.03 |
---|---|
equals()와 == (0) | 2023.01.03 |
클래스와 객체 (Class & Object), 인스턴스 (Instance) (0) | 2023.01.02 |
break, return, continue + for each문 (1) | 2022.12.31 |
JVM / JRE / JDK / Java SE (0) | 2022.12.29 |
댓글