객체는 Java에서 기본적으로 제공하는 클래스입니다. Object 클래스를 제외한 Java의 모든 클래스는 상속 관계를 갖습니다. 기본적으로 Object 상위 클래스를 상속합니다. 즉, Object의 참조를 이용하여 모든 클래스의 객체를 받을 수 있습니다.
예: Object를 사용하여 모든 클래스의 객체를 받습니다
class Person{} class Student{} public class Test { public static void main(String[] args) { function(new Person()); function(new Student()); } public static void function(Object obj) { System.out.println(obj); } } //执行结果: Person@1b6d3586 Student@4554617c
따라서 개발 중에는 Object 클래스가 가장 통합된 유형의 매개변수입니다. 그러나 Object 클래스에는 잘 정의된 메서드도 있습니다.
다음 세 가지 메소드가 있습니다: toString() 메소드, equals() 메소드, hashcode() 메소드
내용을 인쇄하고 싶을 때. 이는 Object 클래스의 toString 메소드를 재정의하여 달성할 수 있습니다!
다음은 toString() 메서드를 재정의해야 하는 이유를 설명합니다.
다음 코드는 Person 개체를 인쇄하려고 합니다.
public class Person { String name; String gender; int age; public Person(String name, String gender, int age) { this.name = name; this.gender = gender; this.age = age; } public static void main(String[] args) { Person person = new Person("Jim","男", 18); System.out.println(person); } }
인쇄된 실행 결과가 개체의 특정 내용이 아닌지 확인하세요
여기서는 println 메소드 소스 코드를 살펴보겠습니다. 소스 코드에서 String 클래스의 valueOf 메소드가 호출됩니다. valueOf의 소스 코드로 이동하면 메소드 본문에서 실제로 toString 메소드가 호출되는 것을 확인할 수 있습니다. 이때, toString의 구체적인 구현을 살펴보겠습니다.
getClass().getName()은 이 Object의 런타임 클래스(Class)를 반환하고, 해당 개체의 이름(클래스, 인터페이스, 배열 클래스)을 반환합니다. , 기본 유형 또는 void) 이 Class 객체가 String 형식으로 표현합니다.
hashCode() 메서드는 "주소"를 반환합니다.
Integer.toHexString(hashCode()) 이 객체(int 유형)의 해시 코드 값을 가져옵니다. 래퍼 클래스 Integer 클래스를 사용하여 이 int 유형 값의 해시 코드를 가져와서 이를 16진수 부호 없는 정수로 변환하고 변환된 16진수 정수를 문자열 형식으로 표현합니다.그래서 출력 함수 println은 toString을 호출하여 구현됩니다. 특정 내용에 대해 인쇄 개체를 구현하려면 자체 아이디어에 따라 Object 클래스의 toString 메서드만 다시 작성하면 됩니다.public class Person { String name; String gender; int age; @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", gender='" + gender + '\'' + ", age=" + age + '}'; } public Person(String name, String gender, int age) { this.name = name; this.gender = gender; this.age = age; } public static void main(String[] args) { Person person = new Person("xin","男", 21); System.out.println(person); } }
3. 같음 메소드
Java에서 ==를 비교할 때:
==의 왼쪽과 오른쪽이 기본 유형 변수인 경우 변수의 값이 동일한지 여부를 비교합니다객체 비교 코드 예시:
class Person{ private String name ; private int age ; public Person(String name, int age) { this.age = age ; this.name = name ; } @Override public boolean equals(Object obj) { if (obj == null) { return false ; } if(this == obj) { return true ; } //不是Person类对象 if (!(obj instanceof Person)) { return false ; } Person person = (Person) obj ; // 向下转型,比较属性值 return this.name.equals(person.name) && this.age==person.age ; } } public class Test { public static void main(String[] args) { Person p1 = new Person("xin", 20); Person p2 = new Person("xin", 20); Person p3 = new Person("rong", 21); System.out.println(p1.equals(p2)); System.out.println(p1.equals(p3)); } }
실행 결과:
4. hashcode 메소드는 객체가 메모리의 동일한 위치에 저장되어 있는지 확인하는 데 사용됩니다
해시 테이블의 hashCode() 함수는 객체의 해시 코드를 얻은 다음 해당 객체가 해시 테이블에 있는지 확인하는 것입니다 위치.
hashCode 메소드 소스 코드:이 메소드는 기본 메소드이며 맨 아래 레이어는 C/C++ 코드로 작성되어 컴파일러에서 관찰할 수 없습니다.
우리는 이름과 나이가 같은 두 객체는 동일한 객체이며 동일한 위치에 저장되어야 한다고 믿습니다.
아래 코드를 보면 hashCode() 메서드를 재정의하지 않으며 두 객체는 내용은 동일하지만 결과 해시 값은 다릅니다:
class Person { public String name; public int age; public Person(String name, int age) { this.name = name; this.age = age; } } public class TestDemo4 { public static void main(String[] args) { Person per1 = new Person("xin", 21) ; Person per2 = new Person("xin", 21) ; System.out.println(per1.hashCode()); System.out.println(per2.hashCode()); } }
두 개체의 내용이 동일하다고 생각하려면 메모리에서의 위치가 동일해야 하며 다음이 필요합니다. hashCode() 메소드를 다시 작성합니다.
import java.util.Objects; class Person { public String name; public int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public int hashCode() { return Objects.hash(name, age); } } public class TestDemo4 { public static void main(String[] args) { Person per1 = new Person("xin", 21) ; Person per2 = new Person("xin", 21) ; System.out.println(per1.hashCode()); System.out.println(per2.hashCode()); } }
실행 결과:
위 내용은 Java 객체 클래스에서 메소드를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!