9C BLOG
== 와 equals의 차이점 본문
Java에서 int와 boolean과 같은 일반적인 데이터 타입의 비교는 ==이라는 연산자를 사용하여 비교한다.
하지만 String처럼 Class의 값을 비교할 때는 == 대신 equals()라는 메소드를 사용해 비교하는데
어떨때 equals를 사용하고 어떨때 ==를 사용하는지, equals와= ==는 어떤 차이점이 있는지 알아보자.
String 변수 생성 시 주소할당
String 변수를 생성할 때는 두가지 방법이 있다.
1. 리터럴(literal)을 이용한 방식
2. new 연산자를 이용한 방식
위의 두 방식에는 큰 차이점이 있다.
리터럴을 사용하게 되면 string constant pool*
이라는 영역에 존재하게 되고
new를 통해 String을 생성하면 Heap 영역에 존재하게 된다.
String str1 = "apple"; // 리터럴 이용
String str2 = new String("banan"); // new 연산자를 이용
String을 리터럴로 선언할 경우, 내부적으로 String의 intern() 메서드가 호출되게 되고
intern() 메서드는 주어진 문자열이 string constant pool에 존재하는지 검색하고 있다면 그 주소값을 반환,
없다면 string constant pool에 넣고 새로운 주소값을 반환한다.
주소값 비교(==)와 값 비교(equals)
== 연산자와 equals() 메소드의 가장 큰 차이점은
== 연산자는 비교하고자 하는 두 개의 대상의 주소값을 비교하는데,
String 클래스의 equals 메소드는 비교하고자 하는 두 개의 대상의 값 자체를 비교한다는 점이다.
equals()는 모든 객체의 부모 클래스인 Object에 정의되어있는 메소드다.
String 클래스는 위와 같이 equals()를 오버라이드하여 인자로 전달된 String의 문자열을 비교한다.
코드를 보면,
== 키워드로 객체가 같다면 더 확인하지 않고 true를 리턴하고, 객체가 다른 경우 인자가 String이라면 문자열을 비교하여 동일한지에 대한 결과를 리턴하고 있다.
기본 타입의 int, char형 등은 Call By Value 형태로 기본적으로 대상에 주소값을 가지지 않는 형태로 사용된다.
하지만 String은 일반적인 타입이 아니라 클래스다.
클래스는 기본적으로 Call By Reference 형태로 생성 시 주소값이 부여된다.
그렇기에 String 타입을 선언했을 때는 같은 값을 부여하더라도 서로 간의 주소값이 다른 것이다.
https://sudo-minz.tistory.com/93
[Java] 자바 문자열 비교 == equals() 차이점
Java에서 int와 boolean과 같은 일반적인 데이터 타입의 비교는 ==이라는 연산자를 사용하여 비교한다. 하지만 String처럼 Class의 값을 비교할때는 == 대신 equals()라는 메소드를 사용해 비교하는데 어떨
sudo-minz.tistory.com
https://go-coding.tistory.com/35
[JAVA] String에서의 ==와 equals() 차이점
자바의 최상위 클래스는 Object클래스이다. Object클래스에는 기본적으로 equals(), hashCode(), toString(), clone(), notify()등 여러 메소드가 존재한다. 그 중에서도 우리가 가장 많이 사용하는 equals()에 대해
go-coding.tistory.com
'STUDY > JAVA' 카테고리의 다른 글
자바에서 Math.round(-1.5)는 무엇을 의미합니까? (0) | 2023.06.21 |
---|---|
자바에서 final의 기능은 무엇입니까? (0) | 2023.06.21 |
주니어 자바 개발자을 위한 질문 (2) (0) | 2023.06.20 |
주니어 자바 개발자을 위한 질문 (1) (0) | 2023.06.20 |
JDK와 JRE의 차이점 (0) | 2023.06.20 |