• 기본 자료형(primitive): 아예 객체가 아니라서 toString() 존재 X

    (출력 시엔 보통 System.out.println(10);처럼 값이 그냥 찍힘)

  • 래퍼 타입(Integer, Long, Double, …): toString() 오버라이딩 되어 있음

  • 직접 만든 클래스: 안 만들면 Object.toString() 그대로 → 클래스명@해시코드 형태

    → 필요하면 직접 오버라이딩해야 한다.

  • 배열(Array): toString() 오버라이딩 안 되어 있음 → [I@1a2b3c 같은 형태로 나옴.

    → 내용 보려면 Arrays.toString(arr) / 다차원은 Arrays.deepToString(arr) 사용.

  • 컬렉션(List/Set/Map): toString() 오버라이딩 되어 있음 → "[a, b]", {k=v}처럼 나옴.

    단, 요소에 네가 만든 객체가 들어있고 그 객체가 toString() 없으면, 리스트 안에서도 Foo@1a2b3c로 보임.

  • String / Enum / record:

    • String.toString()은 자기 자신을 돌려줌
    • Enum은 기본적으로 이름(name)을 출력.
    • record는 필드명=값 형태로 자동 생성된 toString() 제공