동등 비교
== , !=
크기 비교
< ,<=,>,>=
비교한 후 결과를 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)
객체참조타입은 하나의 변수가 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 가 된다
논리 연산자는 논리곱(&&) , 논리합(||) ,베타적 논리합(^) , 논리 부정(!) 연산을 수행한다.
논리 연산자 역시 조건문/반복문에서 자주 사용된다
int a = 10;
int b = 2;
int c = 10;
if((a>b)&& (c>=a)){
System.out.println("둘다 참입니다")
}
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를 반환한다
String str = "집에가고싶어";
String str1 = "아니 안가고싶어";
if(!(str.equals(str1))){
System.out.println("두개의 자아가 다른게 맞으니 참을 반환합니다");
}
str.equals(str1) 의 결과가 true인걸 ! 으로 부정하는 조건이기 때문에 결과는 true가 된다