!
: boolean 값을 반전boolean bool1 = true;
boolean bool2 = false;
boolean bool3 = !true; // false
boolean bool4 = !false; // true
boolean bool5 = !!bool3; // false
boolean bool6 = !!!bool3; // true
💡 참고
IntelliJ에서 비교 연산자에 커서를 가져다 대면 단위별로 true , false 가 표시됨
a && b | AND | a와 b가 모두 true일때만 true 반환 |
---|---|---|
a || b | OR | a와 b 중 하나만 true면 true 반환 |
int num = 4;
boolean isPositiveAndOdd = num >= 0 && num % 2 == 1; // true && false = false
boolean isPositiveOrOdd = num >= 0 || num % 2 == 1; // true || false = true
boolean isPositiveAndEven = num >= 0 && num % 2 == 0; // true && true = true
boolean isPositiveOrEven = num >= 0 || num % 2 == 0; // true || true = true
num = 6;
// 💡 &&가 ||보다 우선순위 높음
boolean boolA = (num % 3 == 0) && (num % 2 == 0) || (num > 0) && (num > 10); // true
boolean boolB = (num % 3 == 0) && ((num % 2 == 0) || (num > 0)) && (num > 10); // false
&&
: 앞의 것이 false
면 뒤의 것을 평가할 필요 없음||
: 앞의 것이 true
면 뒤의 것을 평가할 필요 없음int a = 1, b = 2, c = 0, d = 0, e = 0, f = 0;
boolean bool1 = a < b && c++ < (d += 3); // a<b가 true이므로 뒷부분도 평가
boolean bool2 = a < b || e++ < (f += 3); // a<b가 true이므로 뒷부분은 평가❌
boolean bool3 = a > b && c++ < (d += 3); // a>b가 false이므로 뒷부분 평가❌ -> 디버깅 시, c=1, d=3
boolean bool4 = a > b || e++ < (f += 3); // a>b가 false이므로 뒷부분 평가 -> 디버깅 시, e=0, f=0
// 최종 결과 -> a=1, b=2, c=1, d=3, e=1, f=3
?
b :
ctrue
일 때 반환될 값false
일 때 반환할 값int num1 = 3, num2 = 4;
char num1OE = num1 % 2 == 1 ? '홀' : '짝'; // '홀'
char num2OE = num2 % 2 == 1 ? '홀' : '짝'; // '짝'
int num = 3;
boolean mult2 = true;
boolean plus5 = true;
System.out.println(
(!mult2 && !plus5) ? num
: (mult2 && plus5) ? num * 2 + 5
: mult2 ? num * 2
: num + 5
); // 11
int x = 1, y = 2;
int changed1 = x < y ? (x += 2) : (y += 2); // x<y가 true이므로 true일 때 반환될 값만 연산
int changed2 = x < y ? (x += 2) : (y += 2); // x=3 y=2
int changed3 = x < y ? (x += 2) : (y += 2); // x=3 y=4
int changed4 = x < y ? (x += 2) : (y += 2); // x=5 y=4
int changed5 = x < y ? (x += 2) : (y += 2); // x=5 y=6
// 최종 결과 -> x=7 y=6
출처 - 인프런 '제대로 파는 자바' 강의