본문 바로가기
Dev/Java

[Java] && 와 &는 동일하지 않다.

by Ellen571 2024. 7. 29.
반응형

참, 거짓으로 구분하는 연산자를 논리 연산자라고 한다.

  • && : 모두 true여야만 true
  • || : 한 개만 true여도 true
System.out.println(true&&true); // true
System.out.println(true&&false); // false
System.out.println(true||false); // true
System.out.println(false||false); // false

 

두 문자 쌍으로 나타내는 연산자 말고 한 개짜리도 있다.

비트로 전환해 연산하는 비트 논리 연산자 이다.

  • & : 모두 true여야만 true
  • : 한 개만 true여도 true

 

이 두 연산자는 또 다른 차이점이 있다.

한 쪽만 실행하고 결과가 나오면 반환하느냐, 끝까지 실행해 보느냐의 차이이다.

  • &&의 경우 왼쪽이 false면 그 뒤는 실행하지 않고 false로 반환한다.
  • &의 경우 왼쪽이 false여도 그 뒤도 실행한 후 false로 반환한다.
  • ||의 경우 왼쪽이 true면 그 뒤는 실행하지 않고 true로 반환한다.
  • |의 경우 왼쪽이 true여도 그 뒤도 실행한 후 true로 반환한다.
int a = 7, b = 4;

System.out.println((a==b)&&(a>b++)); // false
System.out.println(b) // 앞이 false여서 뒤는 실행 안함 4
System.out.println((a==b)&(a>b++)); // false
System.out.println(b) // 앞이 false여도 뒤 실행 5
System.out.println((a!=b)||(a>b++)); // 
System.out.println(b) // 앞이 true여서 뒤는 실행 안함 5
System.out.println((a!=b)|(a>b++));
System.out.println(b) // 앞이 true여도 뒤 실행 6

 

숫자끼리는 논리연산자를 사용할 수 없지만, 비트 논리연산자는 사용할 수 있다.

System.out.println(6&4); // 4
System.out.println(6|3); // 7

 

왜? 우선 비트화 시킨 후 실행하기 때문이다.

 

6 → 0110, 4 → 0100, 3 → 0011

 

6&4  둘 다 모두 1이면 1이 된다.

  • 0110
  • 0100
  • ------
  • 0100 > 결국 4가 출력

6|3  둘 중 하나라도 1이면 1이 된다.

  • 0110
  • 0011
  • ------
  • 0111 > 결국 7이 출력
반응형

'Dev > Java' 카테고리의 다른 글

[Java] ==와 equals() 차이  (0) 2024.07.30
[Java] 데이터 타입  (0) 2024.07.28
[Java] JVM 구조  (0) 2024.07.27
[Java] 자바 프로그램은 어떻게 실행될까?  (0) 2024.07.27
[Java] 프로그래밍은 언제부터 시작?  (0) 2024.07.27