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()
- 매개변수로 들어온 객체가 이클래스 타입인지 비교
- 맞다면 다운캐스팅
- 조건에 맞춰서 값을 비교
이미 구현되어 있는 사용 예) 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 |