[java] 논리연산자 &&,||와 비트연산자 &,| 차이
알고리즘 문제 풀이 중 아무 생각없이 논리연산자인 &&와 ||를 사용했다.
비트연산자도 논리연산자처럼 쓰이기 때문에
& , | 와의 차이점을 알고있었는데, 습관적으로 && 와 || 만 쓰다보니 어느 상황에 어떤 연산자를 써야하는지 헷갈렸다.
이번 기회에 확실히 정리해보자.
1. 비트 연산자
& , | 는 비트 연산자
이다.
그러나 JAVA 에서는 논리 연산자처럼 사용 가능
하다.
왜냐하면 결과 값이 ||와 &&를 사용했을 때와 같기 때문이다.
- | : 비트 비교시,
하나라도 1이면
1을 반환한다.
0 | 0 == 0
0 | 1 == 1
1 | 0 == 1
1 | 1 == 1 - & : 비트 비교시,
두 비트 모두가 1인 경우만
1을 반환한다.
0 & 0 == 0
0 & 1 == 0
1 & 0 == 0
1 & 1 == 1
2. 논리 연산자
논리 연산자는 논리식을 판단하여, 참(true)과 거짓(false)을 반환한다.
- || :
논리식 중에서 하나라도 참이면
참(1)을 반환한다. (OR 연산) - && :
논리식이 모두 참이면
참(1)을 반환한다. (AND 연산)
3. &,| 와 &&,|| 연산자의 차이점
이 둘은 모두 같은 결과를 반환한다.
&와 &&는 모든 조건이 참일 때만 참이고, |와 ||는 하나의 조건만 참이면 참이다.
이 둘의 차이점은
따라서 결과값이 달라질 수 있으니 잘 구분해서 사용해야 한다.
int A = 1;
String B = null;
if(A==0 && B=="b") { //왼쪽이 false이므로 오른쪽 조건체크 x
System.out.println("&& : good");
}
if(A==0 & B=="b") { //왼쪽이 false여도 오른쪽 조건체크 o
System.out.println("& : good");
}
[출력 결과]
&& : good (정상적으로 출력)
NullPointerException 예외 발생
int A = 1;
String B = null;
if(A==1 || B=="b") { //왼쪽이 true이므로 오른쪽 조건체크 x
System.out.println("|| : good");
}
if(A==1 | B=="b") { //왼쪽이 true여도 오른쪽 조건체크 o
System.out.println("| : good");
}
[출력 결과]
|| : good (정상적으로 출력)
NullPointerException 예외 발생
⇒ 일반적인 경우는 같은 결과값이 출력되겠지만, String 변수 B의 값이 null인 경우 결과값이
달라지는 것을 볼 수 있다.
따라서 NullPointerException 예외처리를 하고싶으면 둘을 구분해서 써야한다!!
참고링크 |
탐P슨님 blog
Leave a comment