논리 연산자 &, |
이미 조건식의 결과가 결정이 나더라도 모든 조건을 끝까지 검사한다.
&
T & T = T
T & F = F
F & T = F: 앞이 F면 뒤를 보지 않아도 결과는 F이다. 그러나 & 연산자는 뒤의 조건도 모두 확인해서 F로 결론을 낸다.
F & F = F
|
T | T = T
T | F = T: 앞이 T면 뒤를 보지 않아도 결과는 T이다. 그러나 | 연산자는 뒤의 조건도 모두 확인해서 T로 결론을 낸다.
F | T = T
F | F = F
논리 연산자 &&, ||
조건식의 결과가 결정되는 순간 검사를 종료한다.
&&
T && T = T
T && F = F
F && T = F: 앞이 F면 뒤를 보지 않아도 결과는 F이다. &&는 뒤의 조건을 확인하지 않고 바로 F로 결론을 낸다.
F && F = F
||
T || T = T
T || F = T: 앞이 T면 뒤를 보지 않아도 결과는 T이다. ||는 뒤의 조건을 확인하지 않고 바로 T로 결론을 낸다.
F || T = T
F || F = F
package day03;
public class Operator {
public static void main(String[] args) {
int i = 1;
int j = i++; //j=1, i=2
if((i>++j)&(i++ ==j)){ //(2>2)=F & (2==2)=T -> i =3 ==> F
i = i + j; //실행x
} //i=3, j=2
System.out.println("i=" + i);
System.out.println("j=" + j);
int x = 1;
int y = x++; //y=1, x=2
if((x>++y)&&(x++ ==y)){ //y=2, ((2>2)=F && (뒤는 실행x) ==> F
x = x + y;
}
System.out.println("x=" + x); //x=2
int k = 0;
int p = 1;
if((k++ ==0)|(p++ ==2)) { // (0==0)=T -> k=1 | (1==2)=F -> p=2 ==> T
k=42; //실행o
}
System.out.println("k="+k + ", p=" + p); //k=42, p=2
int a = 0;
int b = 1;
if((a++ ==0)||(b++ ==2)) { //(0==0)=T -> a=1 || (뒤는 실행x) => T
a=42;
}
System.out.println("a="+a + ", b=" + b); //a=42, b=1
}
}