해결된 질문
작성
·
162
0
안녕하세요
toString 관련 질문입니다
Book book = new Book("asdf", " zxcv");
System.out.println(book);
부분인데요
book 넣으면 처음엔
object.Book@237894 가 나왔는데요
이부분이
getClass().getName() + "@" + Integer.toHexString(hashCode());
이렇게 되어있는 건 이해했습니다
이해가 안 되는 건
왜 toString() 이 호출되는지 입니다.
System.out.println은 book이라는 객체를 매개변수로 넣었는데 왜 book(또는 그 부모 class)의 toString을 찾아서 화면에 호출하나요?
제 생각엔 System.out.println 말고 다른 곳에서 써도 book은 toString()을 반환할 거 같은데
1. 왜 book을 넣으면 toString을 반환하나요?
2. book을 넣으면 toString을 반환하게 하는 관련 소스 위치를 알 수 있을까요?
답변 1
6
누가 보실 지는 모르겠지만 혹시 해당 강의 보시는 분들 도움 되시라고 알아내서 여기에 작성합니다
println, print 등은 Object가 매개변수일 때(위 상황의 경우 book)
내부에 String.valuejOf을 호출합니다
valueOf는 Object를 받아서 toString을 호출합니다
즉,
System.out.println(book)
-> public void println(Object x)
{ String s = String.valueOf(x) ... }
->public static String valueOf(Object obj)
{ return (obj == null) ? "null" : obj.toString(); }
이런식입니다.
이후 toString이 재정의 되어있으면 그걸 따를 거고 아니면 Object의 toString을 호출하겠죠