인프런 커뮤니티 질문&답변

asil님의 프로필 이미지

작성한 질문수

Do it! 자바 프로그래밍 입문 with 은종쌤

기본 클래스(1)

toString 관련 질문

해결된 질문

작성

·

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

asil님의 프로필 이미지
asil
질문자

누가 보실 지는 모르겠지만 혹시 해당 강의 보시는 분들 도움 되시라고 알아내서 여기에 작성합니다

 

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을 호출하겠죠

asil님의 프로필 이미지

작성한 질문수

질문하기