자동 형변환 : 자바에서 int와 long 간의 비교 시 int가 long으로 자동 형변환되어 비교됨
문자열 비교시 == 연산자는 참조값을 비교, equals() 메서드는 문자열의 실제 내용을 비교
자동 형변환과 값 비교 |
- 자바는 같은 타입끼리 연산자 사용 가능 - 다만, 서로 다른 기본 타입을 비교할 때, 작은 타입이 큰 타입으로 자동 형변환됨 ex) int 타입과 long 타입의 값을 비교할 때, int 타입이 long 타입으로 자동 형변환된 후 비교가 이루어짐 |
문자열 비교 |
- 문자열을 비교할 때는 == 연산자와 equals() 메서드의 차이를 이해해야 함 - == 연산자는 참조값을 비교 - equals() 메서드는 문자열의 내용을 비교합니다. |
[예제 코드]
public class Main {
public static void main(String[] args) {
int num1 = 1;
long num2 = 1L;
System.out.println(num1 == num2);
// 다른 타입인데? -> int와 long은 서로 다른 타입이지만,
// '==' 연산을 수행할 때, num1이 long 타입으로 자동 형변환되어 비교되므로, 두 값이 같기 때문에 true 출력
String name1 = "winter";
String name2 = "winter";
System.out.println(name1 == name2);
// true -> 문자열 리터럴 "winter"는 상수 풀(constant pool)에 저장되며,
// name1과 name2는 같은 리터럴을 참조하므로 동일한 주소값을 가지며 true 출력
System.out.println("이름을 입력해주세요");
Scanner sc = new Scanner(System.in);
String newName = sc.nextLine();
System.out.println(name1 == newName); // false
// 주소값 비교 -> newName은 새로운 문자열 객체를 가리키므로,
// name1과 다른 참조값을 가지기 때문에 false 출력
System.out.println(name1.equals(newName)); // true
// 값 비교 -> equals() 메서드는 문자열의 내용을 비교하므로,
// newName이 "winter"라면 true 출력
sc.close(); // Scanner를 사용한 후 닫아주는 것이 좋습니다
}
}
Keypoint | |
int와 long의 비교 | - num1 == num2: int와 long은 서로 다른 타입이지만, == 연산자는 값을 비교함 - 따라서 두 값이 같기 때문에 true를 출력합니다 |
String 리터럴 비교 | - name1과 name2는 모두 "winter"라는 동일한 문자열 리터럴을 참조 - 자바에서는 동일한 문자열 리터럴을 상수 풀(constant pool)에 저장하고, 동일한 리터럴에 대해 동일한 참조를 사용하기 때문에 == 연산자는 true를 반환함 |
사용자 입력 문자열 비교 | - newName은 Scanner를 통해 입력받은 문자열로, 새로운 객체로 생성됨 - name1과 newName은 서로 다른 참조값을 가지기 때문에 == 연산자는 false를 반환 - equals() 메서드는 문자열의 내용을 비교 - 만약 newName이 "winter"라면 name1.equals(newName)는 true를 반환 |
728x90
'Java > [국비] JAVA' 카테고리의 다른 글
[국비][JAVA] 그 외 제어자(지정자) Static 이해 및 클래스 영역/스택영역/힙영역 이해 (0) | 2024.06.01 |
---|---|
[국비][JAVA] this 이해하기 (0) | 2024.05.30 |
[국비][JAVA] Class, Object이해_심화 예시 (0) | 2024.05.29 |
[국비][JAVA] Class, Object이해 (0) | 2024.05.29 |
[국비][JAVA] char 타입 → int 타입 변환 및 아스키코드표 (0) | 2024.05.27 |