String 객체와 문자열 리터럴
Java에서 “ “ 로 만들어진 문자열은 내용이 같으면, ‘문자열 풀’이라는 곳에 저장.
하지만, new로 생성되는 경우 다른곳에 저장된다.(heap)
동일한 값이어도 다른 객체를 참조하기 때문에 다르게 나온다.
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");이라고 할때
str1 == str2 : true
str2 == str3 : false
str1 == str3 : false
str1.equals(str2) : true ⇒ equals는 내용을 본다
str1.equals(str3) : true
래퍼클래서 (Integer와 int, Double)
Java에서 정수는 -128부터 127까지의 범위를 수용하는데
Integer을 사용한 경우 저 범위를 초과한다면 무조건 false가 나온다.
(초과하지 않는다면 true)
public class WrapperClassComparison {
public static void main(String[] args) {
Integer num1 = 128;
Integer num2 = 128;
Integer num3 = new Integer(128);
Integer num4 = 127;
Integer num4 = 127;
}
}이라고 할 경우
num1 == num2 : false
num1 == num3 : false
num1.equals(num2) : true
num1.equals(num3) : true
num4 == num5 : true
num4.equals(num5) : true
Double은 Int와 달리 허용 범위가 없고
==으로 비교하면 모두 false가 나옴
Double d1 = 128.0;
Double d2 = 128.0;
Double d3 = new Double(128.0);equals는 문자열을 비교하기 때문에 다 true가 나오지만
==으로 비교할 경우 모두 false가 나온다.
요약
==과 equals는 다르게 동작한다.
== : 동일한 메모리 위치를 가리키나요?
.equals : 두 객체의 데이터의 내용이 같은가요?
Share article