ShortCut Operation
위에서 설명 했듯이 비트 곱( & ) 과, 비트 합( | )은 논리 연산자로 사용이 가능하다.
그렇다면 && 과 & 의 차이점은 무엇일까? 결과는 비슷하나 원리가 다름
if ( 조건식 1 && 조건식 2 )
- &&은 조건식 1이 거짓이라면 조건식 2를 수행하지 않음
- 그래서 &&, || 를 Shortcut Operation 이라고 함.
만약 if ( 조건식 1 & 조건식 2 ) 일 경우
- & 가 논리연산자로 사용될 때는 조건식 1이 거짓이라도 일단 조건식 2도 실행함.
- 즉, 조건식1, 2번 모두 다 실행 해야함.
- 실행하는게 무슨 의미가 있는거냐면, 만약 조건식에 전위연산, 후위연산이 있을 경우 문제가 될 수도 있음.
아래 예시 코드를 확인해보자
int a, b, c, d;
a=b=c=d=5;
if(++c > 100 & ++d > 100) {
System.out.println("OK"); }
else {
System.out.println("NO"); }
System.out.println("c: "+c); // 출력 값: 6
System.out.println("d: "+d); // 출력 값: 6
//---------------------------------------------------------
if (++a > 100 && ++b > 100) {
System.out.println("OK"); }
else {
System.out.println("NO"); }
System.out.println("a: "+a); // 출력 값: 6
System.out.println("b: "+b); // 출력 값: 5
해당 두 코드는 모두 "NO"를 출력한다.
하지만 c, d = 모두 6이 출력 되었지만 a, b는 각각 6, 5가 출력되었다.
- c는 전위 연산으로 우선 6으로 증가 되었고, 해당 조건식 1번은 거짓이지만 &를 논리연산으로 사용한다면 뒤에 조건식 2번을 무조건 실행하기 때문에 d도 전위 연산 실행되므로 모두 6이된다
- 하지만 a, b는 다르다. 각각 6, 5 가 출력된다.
a는 우선 전위 연산 실행하면 6이 되지만 &&논리 연산자의 경우 해당 조건식 1번 자체가 거짓이면 두번째 조건식이 실행되지 않는다. 두번째 조건문이 실행되지 않으니 당연히 b도 전위연산을 할 수가 없으므로 각각 6, 5가 출력 된다
반응형
'개발 > 자바' 카테고리의 다른 글
약수 및 소수 구하기 (0) | 2022.03.30 |
---|---|
중첩 if문 활용도 (0) | 2022.03.29 |
자바 자료형 오버플로우(OverFlow), 언더플로우(UnderFlow) (0) | 2022.03.29 |
(자바) 기본 자료형 (feat. String) (0) | 2022.03.28 |
(자바) Date 클래스 (0) | 2022.03.15 |
댓글