티스토리 뷰

반응형

오늘은 필자의 이전 포스팅에서

설명하기로 했던 equals와 ==의 차이에 대한

포스팅을 진행하겠다.

('이전 포스팅' 클릭)

 

 

이전 포스팅에서도 말했지만

 

👉 equals와 ==의 차이점을 소개하자면

equals의 경우 메서드이기 때문에

()안의 내용을 비교한다.

 

📌

즉 두 대상의 값 자체를 비교한다!

 

 

==의 경우 객체의 주소를 비교한다.

 

기본 타입 int형, char형 등은 대상에 주소값을 가지지 않고 쓰이기 때문에

==(동등비교)가 가능하지만

 

String은 클래스 이기 때문에

생성할 때마다 새로운 주소값이 부여된다.

 

 

 

📌

 그래서 String 타입의 경우 '값' 자체는

같아도 '주소'는 다르다!!

 

 

 

말만 들어선 이해가 어려울 수 있으니

직접 코드를 통해 확인해보자!!

 

 

🤔❓

우선 필자가 위에서 설명한 것을 바탕으로

다음 코드의 실행결과를 예측해보라.

 

 

public class Test {
    public static void main(String[] args) {
        int a = 50;
        int b = 50;
        System.out.println(a==b);
        System.out.println(a.equals(b)); 

        String StringA = "Hello";
        String StringB = "Hello";
        String StringC = new String("Hello");
        System.out.println(StringA==StringB); 
        System.out.println(StringA==StringC); 
        System.out.println(StringA.equals(StringB)); 
        System.out.println(StringA.equals(StringC)); 
    }
}

 


자 이제 실행 결과를 보자.

 

실행결과

 

보다 싶이 a.equals(b)의 경우 에러가 난다.

에러가 나는 이유는 필자가 주석으로 설명해두었으니 참고하길 바란다.

 

그럼 에러가 나는 저 문장을 제외하고 

남은 문장의 실행결과를 눈으로 확인하자.

 

 

실행코드

 

실행결과

 

위에서 설명한대로

intCall By Value

즉, 대상에 주소값을 가지지 않고

값을 할당받는 형태로 사용하기 때문에

a==btrue를 가진다.

 

StringA==StringB

의 경우 같은 객체이기 때문에

true가 나오고

 

StringA==StringC

의 경우 위에서 말했던대로

new 연산자를 사용하여 새 객체를 생성하였으므로

객체의 주소가 달라서 false를 가진다.

 

StringA.equals(StringB)의 경우

'값'비교이기 때문에

true가 나온다.

 

StringA.equals(StringC) 또한

'값'비교이므로

true가 나온다!

 


문제를 보다 이해가 안되거나 설명이 이상한 부분이 있으면 댓글을 활용해주길 바란다.

 

 

 

참고

https://coding-factory.tistory.com/536

 

[Java] 문자열 비교하기 == , equals() 의 차이점

Java에서 int와 boolean과 같은 일반적인 데이터 타입의 비교는 ==이라는 연산자를 사용하여 비교합니다. 하지만 String처럼 Class의 값을 비교할때는 ==이 아닌 equals()라는 메소드를 사용하여 비교를 합

coding-factory.tistory.com

https://ojava.tistory.com/15

반응형