>Java >java지도 시간 >Java 객체 클래스 메소드 인스턴스 분석

Java 객체 클래스 메소드 인스턴스 분석

王林
王林앞으로
2023-04-18 17:49:051092검색

1.equals 메소드

1.API의 equals 메소드 소개

Java 객체 클래스 메소드 인스턴스 분석

2.== equals와의 비교

  • == 판단이 For인 경우 기본 유형과 참조 유형을 모두 결정할 수 있습니다. 기본형의 경우 판단하는 것은 값이 같은지, 참조형의 경우 주소가 같은지, 즉 동일한 객체인지를 판단하는 것입니다.

  • equals 메서드는 참조 유형만 확인할 수 있습니다. 기본값은 주소가 동일한지 확인하는 것입니다. 이 메서드는 종종 다시 작성한 후 확인하는 데 사용됩니다. 내용이 동일한지

Object, String, Integer에서 Equals 메소드의 JDK 소스코드를 살펴볼 수 있습니다.

Object o = new Object();
o.equals(1);//Object类中的equals方法
System.out.println("hello".equals("hello"));//String中的equals方法
Integer integer = new Integer(5);
System.out.println(integer.equals(5));//Integer中的equals方法
//将光标放在equals方法上,按Ctrl同时按鼠标左键,就可跳转到String和Integer中的equals方法的JDK源码。
//Object类中的equals方法
public boolean equals(Object obj) {
        return (this == obj);//判断是不是当前对象
}
//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;
    }
 //Integer类中重写的equals方法
public boolean equals(Object obj) {
        if (obj instanceof Integer) {//判断当前类型是不是Integer类型
            return value == ((Integer)obj).intValue();//向下转型
        }
        return false;
    }

2.hashCode 메소드

1.API의 hashCode 메소드 소개

Java 객체 클래스 메소드 인스턴스 분석

2. 해시 구조를 사용하여 컨테이너의 효율성을 높입니다.

3. 두 참조가 동일한 개체를 가리키는 경우 해시 값은 동일합니다. 서로 다른 개체를 가리키는 경우 해시 값이 다릅니다.

4. 해시값은 주로 주소를 기반으로 하지만, 해시값이 주소와 동일할 수는 없습니다.

3. toString 메소드

1. API의 toString 메소드 소개

Java 객체 클래스 메소드 인스턴스 분석

2. 기본 반환: 전체 클래스 이름(패키지 이름 + 클래스 이름) + @ + 해시 값의 16진수.

3. toString 메소드는 객체 속성을 반환하기 위해 종종 재정의됩니다.

4. 객체를 직접 출력하는 경우 기본적으로 toString 메서드가 호출됩니다.

//JDK中的toString方法源码
public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    //返回全类名(包名+类名)+@+哈希值的十六进制
    }
//重写toString方法
 @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                '}';
    }//往往重写toString方法,用于返回对象属性。

4.finalize 메소드

1.API의 finalize 메소드 소개

Java 객체 클래스 메소드 인스턴스 분석

2. 객체가 재활용되면 시스템은 자동으로 객체의 finalize 메소드를 호출합니다. 서브클래스는 이 메서드를 재정의하고 일부 작업을 수행하여 리소스를 해제할 수 있습니다.

3. 객체에 참조가 없으면 jvm은 가비지 수집 메커니즘을 사용하여 객체를 파괴하기 전에 finalize 메소드가 호출됩니다.

4. 가비지 수집 메커니즘의 호출은 시스템의 GC 알고리즘에 의해 결정되며 System.gc()를 통해 적극적으로 트리거될 수도 있습니다.

위 내용은 Java 객체 클래스 메소드 인스턴스 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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