ID_DI
DI's study notes
ID_DI
전체 방문자
오늘
어제
  • 분류 전체보기 (85)
    • Deep-Learning (3)
      • CNN (2)
      • NLP (1)
    • Data_Python (6)
      • Numpy (0)
      • Matplotlib (4)
    • Python (8)
      • Python Algorithm (6)
    • Java (36)
      • Java(base) (33)
      • Java practice(base) (2)
    • Git (12)
    • Algorithm (7)
    • etc (7)
    • linux (1)
    • DeskSetup (0)
    • TIL_모각코 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 합병정렬
  • 파이썬
  • 자바
  • java 기초
  • git add.
  • java
  • string to int
  • staged
  • java base
  • binarySearch
  • 커밋
  • matplotlib
  • README.md
  • 정렬
  • Python
  • java.lang
  • 알고리즘
  • git
  • java.net
  • Github

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ID_DI

DI's study notes

[Java]Object class toString(), equals(), hashcode()
Java/Java(base)

[Java]Object class toString(), equals(), hashcode()

2021. 12. 2. 01:48

Object 클래스

  • 모든 클래스들의 최상위 클래스
    • 어떤 클래스들이든 간에 다 가지고 있음
    • 클래스를 만들면 자동으로 Object 클래스를 상속받는다.
  • 객체들이 가져야하는 틀//객체라면 가져야하는 모든 틀
  • Object 객체타입을 매개변수로 받는 메소드들은 어떠한 객체든 다 받을 수 있다.
  • 객체를 넘기라는 뜻

toString()

: 객체 출력시 나올 문자열 정의(객체를 대표하는 문자열 정의)

Object 클래스의 toString() 메소드 재정의

public class ObjTest {
    public static void main(String[] args) {
        Test_A obj = new Test_A("Hello");
        System.out.println(obj);
        System.out.println(obj.toString());
    }
}

class Test_A{
    String data;

    public Test_A(String data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return data;
    }
}
결과:
Hello
Hello

equals()

== 연산자

두 주소값이 같은지 비교

public class StrTest {
    public static void main(String[] args) {

        String msg1 = "Hello";
        String msg2 = "Hello";

        String msg3 = new String("Hello");
        String msg4 = new String("Hello");

        System.out.println("msg1 == msg2 : " + (msg1 == msg2));
        System.out.println("msg3 == msg4 : " + (msg3 == msg4));


    }
}
결과:
msg1 == msg2 : true
msg3 == msg4 : false
  • msg1과 msg2는 "Hello" 값을 담은 String 타입의 객체의 주소값을 동시에 가진다.
  • msg3과 msg4는 각각 생성자를 호출했기 때문에, 각각 "Hello" 값을 담은 String 타입의다른 객체의 주소값을 가진다.

equals()

두 주소값이 같은지 확인하는 메소드

Overriding(재정의) equals()

  1. 매개변수로 들어온 객체가 이클래스 타입인지 비교
  2. 맞다면 다운캐스팅
  3. 조건에 맞춰서 값을 비교

이미 구현되어 있는 사용 예) String class의 Overriding 재정의된 equals() 는 주소값이 아닌 값을 비교한다.

  • 동위객체(주소값이 다른 객체지만, 같은 값을 가진 객체)인지 비교하는 메소드equals()를 동일객체(주소값이 같은 객체)인지 비교하기 위해 equals()로 재정의
public class Zoo {
    public static void main(String[] args) {
        //두마리의 동물 만들어서 equals로 비교하게 해보기
        Animal dog = new Animal("뽀삐",12);
        Animal dog1 = new Animal("뽀삐",12);

        System.out.println(dog.equals(dog1));



    }
}

class Animal{
    String name;
    int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object obj) {
        if(obj instanceof Animal) { //타입비교
            Animal target = (Animal)obj; //다운캐스팅
            if(this.name.equals(target.name) && (this.age == target.age)) {
                return true;
            }
        }
        return false;
    }
}

hashcode()

해시값(주소값의 16진수 int 값) 리턴



따라서 우리가 만드는 클래스에서는 주소값이 아닌 다른 값으로 비교할 수 있도록 재정의 할 수 있어야한다.

'Java > Java(base)' 카테고리의 다른 글

[Java] 스레드 Thread 멀티스레드 Multi-Thread run(), start()  (0) 2021.12.17
[Java] Generic 제네릭<> 클래스, 메소드, 인터페이스  (0) 2021.12.05
[Java] @Annotation, 어노테이션  (0) 2021.12.01
[Java] Java API(Application Programming Interface)  (0) 2021.12.01
[Java] 예외처리 try-catch-finally / throw throws 차이점 및 예제  (0) 2021.12.01
    'Java/Java(base)' 카테고리의 다른 글
    • [Java] 스레드 Thread 멀티스레드 Multi-Thread run(), start()
    • [Java] Generic 제네릭<> 클래스, 메소드, 인터페이스
    • [Java] @Annotation, 어노테이션
    • [Java] Java API(Application Programming Interface)
    ID_DI
    ID_DI
    Computer Vision

    티스토리툴바