프로그래밍/JAVA

[JAVA] "=="연산자와 .equals() 메소드의 비교

pxatd 2021. 4. 18. 04:04
728x90

문제

우리가 프로그래밍을 할 때 데이터 값이나 문자열을 비교할 때 가장 많이 쓰이는 연산자와 문자열을 꼽자면 ==과 .equals() 일 것이다. 이 둘은 문자열의 값을 비교할 때 각각 어떤 차이가 있을까?

 

 

학습

== 연산자와 .equals() 메소드의 비교

 

1. == 연산자

-비교를 위한 연산자

-주소값을 비교한다. (Call By Reference)

-실제 내용이 아니라 그 내용이 적힌 주소를 비교하는 것임

따라서,

String str1="abc";

String str2="abc";

라고 저장한다면, 우리가 보기에 내용이 같기에 ==연산자를 사용했을 때, true를 반환한다고 생각할 수 있지만 컴퓨터의 메모리에 적힌 임의의 주소값은 완전히 다르기때문에 이는 false를 반환한다. 

추가로 만약, 

String str3 = str1; 이라고 선언해 준다면 그건 str1의 주소값을 str3에 넘겨준 것이므로 true를 반환한다. 

 

2. .equals() 메소드

-객체의 내용을 비교한다. (Call By Value)

1번과 같이 스트링 문자열을 선언하면

String str1="abc";

String str2="abc";

.equals() 메소드는 내용 자체를 비교하므로 true를 반환한다. 

 

코드

public Main {

    public static void main(String[] args){

        String str1 = "abc";
        String str2 = str1;
        String str3 = "abc";

        // == 연산자는 주소를 비교합니다.
        System.out.println(str1 == str2); // true
        // str2 에 st1 값을 넣었으므로 주소를 같이 공유합니다.

        System.out.println(str1 == str3); // false
        // str1 과 str3는 각각 생성 되었으므로 주소가 다릅니다.

        // equals() 는 내용을 비교합니다.
        System.out.println(str1.equals(str2)); // ture
        System.out.println(str1.equals(str3)); // true

    }
}
lnsideout.tistory.com/entry/JAVA%EC%9E%90%EB%B0%94-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B9%84%EA%B5%90-equals-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%B0%8F-%EC%B0%A8%EC%9D%B4%EC%A0%90

 

728x90