>  기사  >  백엔드 개발  >  Java에서 ==와 같음의 차이점에 대한 자세한 설명

Java에서 ==와 같음의 차이점에 대한 자세한 설명

不言
不言앞으로
2019-03-07 17:34:483601검색

이 글은 Java에서 ==와 같음의 차이점에 대한 자세한 설명을 제공합니다. 여기에는 특정 참조 값이 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

Java에서 ==와 같음의 차이점을 완벽하게 정확하게 말할 수 있는 사람은 소수에 불과하다고 생각합니다.

일반적인 오답은 다음과 같습니다. == 기본 유형은 값이 동일한지 비교하고, 참조 유형은 참조가 동일한지 비교하며, 같음은 값이 동일한지 비교합니다.

왜 틀렸는지는 이 글의 ==와 같음에 대한 설명을 읽으면 알 수 있습니다.

1. == 해석

기본 유형과 참조 유형에 따라 다음과 같이 ==의 효과가 다릅니다.

기본 유형: 비교되는 것은 값이 동일한지 여부입니다. 비교 여부는 참조가 동일한지 여부입니다. 동일합니다.

코드 예:

String x = "string";
String y = "string";
String z = new String("string");
System.out.println(x==y); // true
System.out.println(x==z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true

코드 해석: x와 y가 동일한 참조를 가리키므로 ==도 true이고 새 String() 메서드가 다시 작성되어 열립니다. 메모리 공간이므로 == 결과는 false 이고, 같음은 항상 값을 비교하므로 결과는 모두 true입니다.

2. 동등의 해석

equals는 본질적으로 ==입니다. 단, 문자열과 정수는 동등 메소드를 재정의하고 이를 값 비교로 전환합니다. 이해하려면 아래 코드를 살펴보세요.

먼저 기본적으로 동일한 값을 갖는 객체를 비교하는 Equals를 살펴보겠습니다. 코드는 다음과 같습니다.

class Cat {
    public Cat(String name) {
        this.name = name;
    }

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Cat c1 = new Cat("王磊");
Cat c2 = new Cat("王磊");
System.out.println(c1.equals(c2)); // false

출력 결과가 기대 이상입니다. 거짓인가요? 무슨 일이 일어나고 있는 걸까요? 소스 코드를 읽어보면 알 수 있습니다.

public boolean equals(Object obj) {
        return (this == obj);
}

equals는 본질적으로 ==입니다.

그렇다면 동일한 값을 가진 두 개의 String 객체가 true를 반환하는 이유는 무엇일까요? 코드는 다음과 같습니다.

String s1 = new String("老王");
String s2 = new String("老王");
System.out.println(s1.equals(s2)); // true

마찬가지로 String의 equals 메소드를 입력하면 답을 찾습니다.

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

String이 Object의 equals 메소드를 재정의하고 참조 비교를 다음으로 변경합니다. 가치 비교.

3. 요약

일반적으로 ==는 기본 유형에 대한 값 비교이고, 참조 유형에 대해서는 기본적으로 참조 비교이지만 많은 클래스에서 이를 다시 작성했습니다. String, Integer 등의 equals 메소드는 이를 값 비교로 변환하므로 일반적인 상황에서는 값이 같은지 비교합니다.

위 내용은 Java에서 ==와 같음의 차이점에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제