오늘은 java에서 &과 &&, |과 ||에 대한 설명과 차이점을 알아보도록 하겠습니다.
검색을 해보니, 어떤 곳은 비트 연산자, 논리연산자 차이라고 하고, 어떤 곳은 조건문 앞뒤 전부 비교의 차이라고 하고..
'대체 어떤게 맞는 걸까' 더 혼란스러워지기만 했습니다
그래서 제대로 알아보도록 하겠습니다!
저와 같은 분들은 이 글이 서칭의 마침표가 되길..
C++을 배웠던 나..이제까지 조건문에 &&와 || 밖에 쓰지 않았는데???
&과 |은 무엇인가
&와 |는 비트 연산자이다.
int num1=10; //1010
int num2=5; //0101
int num3=4; //0100
System.out.println(num1&num2); //0
System.out.println(num2&num3); //4
int num1=10; //1010
int num2=5; //0101
int num3=4; //0100
System.out.println(num1|num2); //15
System.out.println(num2|num3); //5
그러면 &&와 ||는 무엇인가?
논리 연산자이다.
논리 연산자는 조건을 연산하기 위해 사용된다.
주어진 조건에 따라서 true나 false를 반환한다.
여기서 C++과 다른 점은
C++에서는 0보다 큰 숫자는 true, 0이면 false 이런 식으로 대체가 가능했는데, java에서는 대체가 불가능하다.
무조건 true, false여야 함!!
System.out.println(0&&1); //The operator && is undefined for the argument type(s) int, int
System.out.println(true&&true); //true
System.out.println(true&&false); //false
System.out.println(false&&true); //false
System.out.println(false&&false); //false
System.out.println(0||1); //The operator && is undefined for the argument type(s) int, int
System.out.println(true||true); //true
System.out.println(true||false); //true
System.out.println(false||true); //true
System.out.println(false||false); //false
&과 |도 true, false로 연산할 경우, 같은 결과가 나온다.
System.out.println(true&true); //true
System.out.println(true&false); //false
System.out.println(false&true); //false
System.out.println(false&false); //false
System.out.println(true|true); //true
System.out.println(true|false); //true
System.out.println(false|true); //true
System.out.println(false|false); //false
그럼 &과 &&(|과 ||) 차이점은 뭘까???
&과 &&, |과 ||의 차이점은 바로, 앞뒤 조건을 다 실행하느냐, 앞에만 보고 끝나느냐의 차이가 있다.
Integer num1=10;
Integer num2=5;
Integer num3=null;
System.out.println(num1<num2&&num2>num3); //false
System.out.println(num1<num2&num2>num3); //NullPointerException 발생
System.out.println(num1>num2||num2>num3); //true
System.out.println(num1>num2|num2>num3); //NullPointerException 발생
&&의 경우, 10<5가 false이기 때문에 뒤의 조건문을 실행시키지 않고, 바로 값을 반환했다.
&의 경우, 앞이 false임에도 뒤의 num2>num3을 계산했고, num3이 null이기 때문에 계산할 수 없어 NullPointerException이 발생하였다.
|과 ||의 경우도 동일하다.
&과 &&, |과 ||의 정확한 개념과 차이를 알아보았습니다.
블로그 글을 정리하면서 저도 다시 머리속에 정리가 되네요!