java의 equals와 ==의 비교 예시

1887 단어 javaequals
먼저 예:

package com.amos;
/**
 * @ClassName: EqualTest
 * @Description:Java equal ==
 * @author: amosli
 */
public class EqualTest {
    public static void main(String[] args) {
        int a = 1;
        float b = 1.0f;
        System.out.println(a == b);// true
        String c = new String("hi_amos");
        String d = new String("hi_amos");
        System.out.println(c == d);// false
        System.out.println(c.equals(d));// true
    }
}
자바에서 두 변수가 같은지 아닌지를 판단하는 데는 주로 두 가지 판정 방식이 있다. 하나는 == 연산자를 이용하는 것이고, 다른 하나는 equals 방법을 이용하여 양자가 같은지 아닌지를 판단하는 것이다.
1).= = = 를 사용하여 두 변수가 같은지 여부를 판단할 때 두 변수가 기본 형식 변수이고 모두 수치 형식이라면 데이터 형식이 엄격하게 같을 것을 요구하지 않고 두 변수의 값이 같으면true로 되돌아옵니다.
2).두 인용 형식 변수에 대해 하나의 대상을 가리켜야 할 때 == 판단이true.==유형상 부자 관계가 없는 두 객체를 비교할 수 없습니다.
위에서 같은 new String을 설명할 수 있을 때, == 둘이 같은지 아닌지를 판단하는 것은false이고, equals는true이다.
equals 방법이 겨냥한 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;
    }
equals 방법은 사실상 처음부터 == 판별식을 호출한 다음에 그 진일보한 값이 정확한지 판단한다

좋은 웹페이지 즐겨찾기