● Object 클래스(최상위 부모 클래스)
1. toString()
- 항상 객체명을 출력할 때에 toString()이 생략된다.
- toString()을 통해 출력되는 문자열이 마음에 들지 않는다면, 재정의하여 수정하도록 한다.
2. equals(): 주소값 비교(==)
- String 클래스에서 값 비교로 재정의 되었다.
- 문자열 비교에서는 반드시 equals()를 사용하고, null을 비교할 때에는 ==으로 비교한다.
- 만약 두 객체끼리 비교를 할 때, equals()를 사용한다면 원하는 필드 비교를 위한 재정의가 필요하다.
※참고
http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/lang/String.java
3. hashCode()
- 해당 객체의 주소값(메모리상의 주소가 아닌 hash값을 통한 중복없는 값)
실습(toString())
1. Student.java 생성
- 필요한 변수 선언
private static int seq;
private int num;
private String name;
- 필드 생성
// static 필드
// 생성자의 호출 횟수에 상관없이 무조건 한 번만 출력된다.
static {
System.out.println("[학생 관리 프로그램]");
}
// 초기화 필드
// 생성자를 호출할 때마다 무조건 출력된다.
{
System.out.println("학생이 한 명 추가되었습니다.");
this.num = ++seq;
}
- 생성자 생성
public Student() {;}
public Student(String name) {
super();
this.name = name;
}
- getter, setter 생성
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
- toString() 재정의(재정의하지 않으면 사용 시 주소값이 출력된다.)
@Override
public String toString() {
String str = this.num + ". " + this.name; // (ex) 1. 홍길동
return str;
}
2. School.java에서 실행
public class School {
public static void main(String[] args) {
Student kim = new Student();
Student hong = new Student("홍길동");
kim.setName("김철수");
System.out.println(kim);
System.out.println(hong);
}
}
![](https://blog.kakaocdn.net/dn/bo6wSw/btrvJSMmBxa/v90RkajJgWJgZDFhZqsgj0/img.png)
![](https://blog.kakaocdn.net/dn/rSlH7/btrvPgddTlF/HgM1w4zx6JwYXrzVwgn5t1/img.png)
실습(equals()(1))
import java.util.Random;
public class EqualsTest {
public static void main(String[] args) {
Random r1 = new Random();
Random r2 = new Random();
System.out.println(r1);
System.out.println(r2);
// r1과 r2의 주소가 다르다.
System.out.println(r1 == r2);
System.out.println(r1.equals(r2));
// r1과 r2의 주소를 같게 만들어준다.
r1 = r2;
System.out.println(r1 == r2);
System.out.println(r1.equals(r2));
}
}
![](https://blog.kakaocdn.net/dn/z3fB1/btrvJUwDz99/zeFMB2bAz1x2iZmzKthBP1/img.png)
실습(equals()(2))
public class StringTest {
public static void main(String[] args) {
// 이미 동일한 값이 있다면 주소값을 공유하게 된다.
String data1 = "ABC";
String data2 = "ABC";
// new로 선언하면 필드의 우선순위가 높기 때문에 필드 주소를 비교하게된다.
String data3 = new String("ABC");
String data4 = new String("ABC");
System.out.println(data1 == data2);
System.out.println(data1.equals(data2));
System.out.println(data3 == data4); // 필드 주소는 서로 다르다.
System.out.println(data3.intern() == data4.intern()); // 상수의 주소를 비교한다.
System.out.println(data3.equals(data4));
}
}
![](https://blog.kakaocdn.net/dn/boTFjf/btrvL4x2Zkp/gj9WLmPVne7m3QJdcCYGQK/img.png)
실습(equals()(3))
1. Animal.java 생성
- 필요한 변수 선언
public int number;
public String name;
- 생성자 생성
public Animal() {;}
public Animal(int number, String name) {
super();
this.number = number;
this.name = name;
}
- equals() 재정의(재정의하지 않으면 필드 주소를 비교한다.)
@Override
public boolean equals(Object obj) {
if(this == obj) {
return true;
}
if(obj instanceof Animal) {
Animal anotherAnimal = (Animal)obj;
if(this.number == anotherAnimal.number) {
return true;
}
}
return false;
}
2. Zoo.java에서 실행
public class Zoo {
public static void main(String[] args) {
Animal cat = new Animal(1, "고양이");
System.out.println(cat.equals(new Animal(1, "고양이")));
}
}
![](https://blog.kakaocdn.net/dn/bgngPn/btrvK270xQM/u0x70Rn8e8FpdosTYj3zeK/img.png)
![](https://blog.kakaocdn.net/dn/dR0Ppp/btrvLg6Ptnl/xK3QRSbhhwKOB3jHVXD7m0/img.png)
'웹 개발 > Java' 카테고리의 다른 글
[Web_JAVA] 30 (0) | 2022.03.16 |
---|---|
[Web_JAVA] 29 (0) | 2022.03.15 |
[Web_JAVA] 27 (0) | 2022.03.13 |
[Web_JAVA] 26 (0) | 2022.03.12 |
[Web_JAVA] 25 (0) | 2022.03.11 |