-
Java에서 출력할 때 toString()을 생략해도 되는 이유Java 2024. 1. 27. 15:50
많은 사람들이 print(), println() 등 출력메서드를 사용할 때
toString()을 생략해도 된다! 라고 생각만 하거나
혹은 몰랐지만 그냥 그렇게 썼다거나 할 것이다.
도대체 왜 그런지 갑자기 궁금해서
패키지 소스코드를 뒤져봤다.
1. println()
//파라미터가 boolean println() public void println(boolean x) { synchronized (this) { print(x); newLine(); } } //그 외 여러 오버로딩 된 println() . . .
println()을 살펴보니
print()를 호출하고, 줄바꿈을 한다.
이것이 흔히 알고있는 print와 println(줄바꿈)의 차이이다.
2. print()
//파라미터가 char인 print() public void print(char c) { write(String.valueOf(c)); } //파라미터가 int인 print() public void print(int i) { write(String.valueOf(i)); } // 그 외 여러 오버로딩 된 print() . . .
print()는 write()를 호출한다. (줄바꿈은 없다)
이 때 파라미터는 String클래스의 valueOf()의 리턴 값이다.
3. valueOf()
//파라미터가 long인 valueOf() public static String valueOf(long l) { return Long.toString(l); } //그 외 여러 오버로딩 된 valueOf() . . .
valueOf()는 들어온 파라미터의(위 코드에서는 long)
데이터 타입 클래스(Long)에서 오버라이딩한
toString()을 호출해주는 녀석이었다.
==> 결과적으로
println는 print를,
print는 valueOf를,
valueOf는 toString을 호출하는구나.
그래서 println()을 할 때 toString()을 생략해도 되는 거구나!?
'Java' 카테고리의 다른 글
System.out.println()으로 Java의 많은 것을 설명해보자! (0) 2024.01.28 Object 클래스의 equals메서드 (feat. Casting Reference Types) (0) 2024.01.20 Java 모든 Class는 Object Class를 상속 받는다(feat. 오버라이딩) (0) 2024.01.19 Garbage collection을 고려한 코드 작성 (1) 2024.01.19 static 메서드 호출 시 주의점 (0) 2024.01.19