• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

toString 관련 질문

21.12.20 16:30 작성 조회수 119

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

질문자

2021.12.21

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

 

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