>  기사  >  Java  >  Java 객체 클래스에서 메소드를 사용하는 방법

Java 객체 클래스에서 메소드를 사용하는 방법

王林
王林앞으로
2023-04-18 18:13:11746검색

1. 객체 클래스 소개

객체는 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 클래스에는 잘 정의된 메서드도 있습니다.

Java 객체 클래스에서 메소드를 사용하는 방법

다음 세 가지 메소드가 있습니다: toString() 메소드, equals() 메소드, hashcode() 메소드

2 객체를 인쇄하려면 toString 메소드를 재정의하세요

내용을 인쇄하고 싶을 때. 이는 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);
    }
}

인쇄된 실행 결과가 개체의 특정 내용이 아닌지 확인하세요

Java 객체 클래스에서 메소드를 사용하는 방법

여기서는 println 메소드 소스 코드를 살펴보겠습니다. 소스 코드에서 String 클래스의 valueOf 메소드가 호출됩니다. valueOf의 소스 코드로 이동하면 메소드 본문에서 실제로 toString 메소드가 호출되는 것을 확인할 수 있습니다. 이때, toString의 구체적인 구현을 살펴보겠습니다.

Java 객체 클래스에서 메소드를 사용하는 방법

getClass().getName()은 이 Object의 런타임 클래스(Class)를 반환하고, 해당 개체의 이름(클래스, 인터페이스, 배열 클래스)을 반환합니다. , 기본 유형 또는 void) 이 Class 객체가 String 형식으로 표현합니다.

hashCode() 메서드는 "주소"를 반환합니다. Java 객체 클래스에서 메소드를 사용하는 방법

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에서 ==를 비교할 때:Java 객체 클래스에서 메소드를 사용하는 방법

==의 왼쪽과 오른쪽이 기본 유형 변수인 경우 변수의 값이 동일한지 여부를 비교합니다

  • If ==의 왼쪽과 오른쪽은 참조 유형 변수이며, 비교는 참조 변수 주소가 동일한지 여부입니다

  • 객체의 내용을 비교하려면 객체의 equals 메소드를 다시 작성해야 합니다. Equals 메소드도 기본적으로 주소를 기준으로 비교합니다.

객체 비교 코드 예시:

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));

    }
}

실행 결과: Java 객체 클래스에서 메소드를 사용하는 방법

4. hashcode 메소드는 객체가 메모리의 동일한 위치에 저장되어 있는지 확인하는 데 사용됩니다

해시 테이블의 hashCode() 함수는 객체의 해시 코드를 얻은 다음 해당 객체가 해시 테이블에 있는지 확인하는 것입니다 위치. Java 객체 클래스에서 메소드를 사용하는 방법

hashCode 메소드 소스 코드:

이 메소드는 기본 메소드이며 맨 아래 레이어는 C/C++ 코드로 작성되어 컴파일러에서 관찰할 수 없습니다.

우리는 이름과 나이가 같은 두 객체는 ​​동일한 객체이며 동일한 위치에 저장되어야 한다고 믿습니다.

아래 코드를 보면 hashCode() 메서드를 재정의하지 않으며 두 객체는 내용은 동일하지만 결과 해시 값은 다릅니다: Java 객체 클래스에서 메소드를 사용하는 방법

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 객체 클래스에서 메소드를 사용하는 방법

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

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