기본 유형과 참조 유형을 모두 결정할 수 있는 비교 연산자
기본 유형을 결정했다면 값이 같은지 여부를 결정합니다
결정하면 그런 다음 주소가 동일한지, 즉 동일한 객체인지 판단합니다.
는 객체 클래스의 메소드로, 참조 유형
소스 코드와 동일합니다.
public boolean equals(Object obj) { return (this == obj); }
객체 클래스에서 equals 메소드는 객체의 주소가 동일한지(동일한 객체인지) 확인하는 것임을 분명히 알 수 있습니다
그러나 다른 데이터 유형 클래스는 equals 메소드를 재정의합니다. String 클래스 재작성: (두 문자열의 값이 동일한지 확인)
public boolean equals(Object anObject) { if (this == anObject) { return true; } return (anObject instanceof String aString) && (!COMPACT_STRINGS || this.coder == aString.coder) && StringLatin1.equals(value, aString.value); }
예:
String str1 = new String("hello"); String str2 = new String("hello"); System.out.println(str1 == str2); // false System.out.println(str1.equals(str2)); // true
해시 구조로 컨테이너의 효율성 향상
두 개의 참조 지점이 있는 경우 동일한 객체에 대해 해시 값은 동일해야 하며(충돌 없이) 그 반대도 마찬가지입니다
ha 해시 값은 주소에서 왔지만 주소에서 옵니다.
Demo:
// hashCode A a = new A(); A a1 = new A(); A a2 = a; System.out.println(a.hashCode()); System.out.println(a1.hashCode()); System.out.println(a2.hashCode()); ------------------------------
Output:
1324119927
990368553
1324119927
객체의 문자열 표현을 반환합니다
소스 코드:
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
예:
// toString A a3 = new A("dahe",25,"安全服务工程师"); System.out.println(a3.toString());
출력:
classes.A@4162934 6
패키지 이름.클래스 이름@hex hashCode
이제 클래스의 toString 메소드(템플릿)를 다시 작성합니다.
@Override public String toString() { return "A{" + "name='" + name + '\'' + ", age=" + age + ", job='" + job + '\'' + '}'; }
위를 다시 실행합니다. 이제 코드는 다음을 출력합니다.
A{name='dahe', age=25, job='安全服务工程师'}
또한 객체를 직접 출력하면 toString 메소드가 직접 호출됩니다. 기본적으로:
System.out.println(a3);
출력:
A{name='dahe', age=25, job='Security Service Engineer'}
객체가 재활용되면 시스템이 자동으로 객체의 finalize 메서드를 사용하면 하위 클래스에서 이 메서드를 재정의하고 일부 작업을 수행하여 리소스를 해제할 수 있습니다.
참고: JDK18. 마무리는 더 이상 사용되지 않습니다. 시스템의 기본 리소스를 사전에 해제하는 데 도움이 될 수 있지만 솔직히 말해서 Java는 메모리를 자동으로 관리하므로 도움이 되지 않으면 잠재적인 시스템 보안 위험이 발생할 수 있습니다. 이므로 제거될 예정입니다.
예:
// finalize A a4 = new A("dh",33,"架构师"); a4 = null; // 这是a4成为了垃圾,垃圾回收器就会回收对象 // 在销毁对象之前,会调用对象的finalize方法 // 程序员就可以在这个方法中写入自己的业务,释放资源
최종화 방법 재정의:
@Override protected void finalize() throws Throwable { System.out.println("我们销毁对象"); }
또한 가비지 수집기를 적극적으로 실행할 수도 있습니다.
System.gc(); // 主动调用垃圾回收器
위 내용은 Java 객체 클래스를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!