Java의 비교/논리 연산자[이것이 자바다]

SUUUI·2025년 4월 5일

java

목록 보기
14/16
비교연산자
  • 동등 비교
    == , !=

  • 크기 비교
    < ,<=,>,>=

비교한 후 결과를 true/false로 반환한다
보통 비교연산자는 조건문(if) , 반복문(while , for) 문에서 실행 흐름을 제어할때 많이 쓰인다
다음은 비교연산자의 예시다

        int a = 10;
        int b = 20;
        int c = 10;
        
        // 동등 비교 연산자
        System.out.println("=== 동등 비교 연산자 ===");
        System.out.println("a == c: " + (a == c));  // true (10 == 10)
        System.out.println("a == b: " + (a == b));  // false (10 == 20)
        System.out.println("a != b: " + (a != b));  // true (10 != 20)
        System.out.println("a != c: " + (a != c));  // false (10 != 10)
        
        // 크기 비교 연산자
        System.out.println("\n=== 크기 비교 연산자 ===");
        System.out.println("a < b: " + (a < b));    // true (10 < 20)
        System.out.println("a <= c: " + (a <= c));  // true (10 <= 10)
        System.out.println("b > a: " + (b > a));    // true (20 > 10)
        System.out.println("c >= a: " + (c >= a));  // true (10 >= 10)
        
문자열 비교연산자(동등 비교)
  • 문자열의 값을 비교 :
    equals(비교 문자열), !equals(비교 문자열) :
  • 참조 비교 :
    == (같은 주소값의 객체를 참조하는지 확인하는 연산자이다)

객체참조타입은 하나의 변수가 2개의 참조값을 가질 수 없지만
두개의 변수가 하나의 같은 참조값을 가질 수 있다

String str = "탈모돼지";
String str1 = "탈모돼지";
if(str == str1) {
System.out.println("힘내 돼지야");
}

str1을 선언할 때, Java는 이미 String Pool에 "탈모돼지"가 있는지 확인한다.
"탈모돼지" 는 이미 존재하므로, str1은 새로운 객체를 만들지 않고 기존에 있는 "탈모돼지" 객체의 참조값을 그대로 가지게 된다. 그리하여 if문의 (str == str1) 는 true가 된다

String str = "80키로여자";
String str2 = new String("80키로여자");
if(str == str2) {
System.out.println("살빼 돼지야");
}

반면 이 코드에서 str1은 new 키워드를 통해 String Pool이 아닌 힙 영역에
새로운 문자열 객체를 만들어 그 참조값을 가지게 된다. 이 경우 str == str1은
다른 객체를 참조하므로 false가 된다

String str = "타코야끼냠냠";
String str1 = new String("타코야끼냠냠");

if (str.equals(str1)){
    System.out.println("자라나라 머리머리!");
}

equals() 메서드로 비교하게 되면 객체의 참조값이 아닌 값을 비교하는 것이므로
다른 객체지만 값이 같기에 if문의 str.equals(str1) 결과는 true 가 된다

논리연산자

논리 연산자는 논리곱(&&) , 논리합(||) ,베타적 논리합(^) , 논리 부정(!) 연산을 수행한다.
논리 연산자 역시 조건문/반복문에서 자주 사용된다

  1. 논리곱(&&) : AND
    피연산자 전부 true 일때만 true 를 반환한다
int a = 10;
int b = 2;
int c = 10;

if((a>b)&& (c>=a)){ 
System.out.println("둘다 참입니다")
}
  1. 논리합(||) : OR
    피연산자 중 하나라도 true 라면 true 를 반환한다
String str = "타코야끼 얍얍";
String str1 = "타코야끼 얍얍";
String str2 = new String("타코야끼 얍얍");

if((str==str1) || (str2==str1)){ 
System.out.println("str==str1 는 참이니 참이 반환됩니다")
}

3.베타적 논리합(^) :XOR
피연산자 중 하나는 true 이고 다른 하나가 false 일때만 true 를 반환한다

String str = "자라나라머리머리";
String str1 = "자라나라머리머리";
String str2 = new String("자라나라머리머리");

if((str==str1) ^ (str==str2)){ 
    System.out.println("두 조건 중 하나만 참이므로 결과는 참입니다");
}

str==str1은 true, str==str2는 false 고 두 피연산자의 결과가 다르기 때문에 true 를 반환한다
만약 피연산자의 결과가 같게 나온다면 (true/false) 항상 false를 반환한다

  1. 논리 부정(!) :NOT
    피연산자의 논리값을 반대로 바꾼다
String str = "집에가고싶어";
String str1 = "아니 안가고싶어";
if(!(str.equals(str1))){ 
     System.out.println("두개의 자아가 다른게 맞으니 참을 반환합니다");
}

str.equals(str1) 의 결과가 true인걸 ! 으로 부정하는 조건이기 때문에 결과는 true가 된다

profile
간단한 개발 기록

0개의 댓글