class MyObject extends Object { // extends Object 는 생략해도 무방
int objId;
String objName;
public MyObject(int objId, String objName) {
this.objId = objId;
this.objName = objName;
}
}
public class Main {
public static void main(String[] args) {
MyObject o1 = new MyObject(101, "First Object");
MyObject o2 = new MyObject(102, "Second Object");
// 클래스 타입 이름 @ 객체주소 해시코드
System.out.println(o1.toString()); // MyObject@251a69d7
System.out.println(o2.toString()); // MyObject@7344699f
}
}
해당 인스턴스에 대한 정보를 문자열로 반환
객체를 출력할때 toString() 메서드를 붙여주지 않고 변수만 출력해도 메서드를 붙인것과 똑같은 값이 출력된다.
→ 컴파일러가 객체만 출력할 경우 자동으로 toString()을 붙여주고 컴파일 하기 때문
일차원 배열에서만 사용 가능
class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// @Overriding : 오버라이딩은 메서드 시그니처가 일치해야 한다. 블록 안의 내용만 재정의 하는 것이다.
public String toString() {
return String.format("이름 : %s, 나이 : %d세", this.name, this.age);
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person("홍길동", 54);
// p1 객체를 출력하면 이름과 나이가 출력
System.out.println(p1); // 이름 : 홍길동, 나이 : 54세
}
}
객체의 이름이나 주소값이 아닌 객체의 고유 정보(재정의된 문자열 값)를 출력하고 싶을 때
오버라이딩을 통해, toString() 메소드를 재정의 하면 된다.
재정의된 toString 메소드는 직접 호출하지 않더라도
문자열 출력시, 문자열 결합 연산자 등을 사용할 때 자동으로 호출된다.
class MyInt {
final int num;
MyInt(int num) {
this.num = num * 100;
}
// 이 부분이 필요하다!
/* --- 배열 내의 각각의 원소들을 String화 하지 않을 경우, System.out.println(Arrays.toString(arr)); 에서 원하는 값이 나오지 않는다 --- */
@Override
public String toString() {
return Integer.toString(num);
}
/* ------------------------------------ */
}
public class Main {
public static void main(String[] args) {
Object[] arr = new Object[5];
arr[0] = new MyInt(1);
arr[1] = new MyInt(2);
arr[2] = new MyInt(3);
arr[3] = new MyInt(4);
arr[4] = new MyInt(5);
/* 배열 자체를 Stirng화 한 것 → 따라서, 배열 내의 각각의 원소들도 String화가 필요했음 */
System.out.println(Arrays.toString(arr)); // 출력 결과 : [100, 200, 300, 400, 500]
}
}
배열의 원소들이 primitive 타입(int형 같은)이 아닌 reference 타입(객체와 같은)일 경우,
배열을 출력할 때 안에 있는 값을 출력하기 위해선 반드시 일일이 각 객체의 클래스마다 toString() 을 재정의 해야 된다.
참고: [JAVA] ☕ toString 오버라이딩 - 완벽 이해하기
참고: Java 에서 toString 메소드의 올바른 사용 용도에 대하여
참고: (Java)Arrays.deepToString - 2차원 배열 출력