<정처기> Java 3. 같지만 다른것들

빡찌's avatar
Oct 06, 2024
<정처기> Java 3. 같지만 다른것들

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

prettytree