[Java] println(char[ ] 배열명)에서 주소 값이 아닌 텍스트가 나오는 이유

2026. 3. 19. 15:52·Java

 

자바의 실제 JDK 소스 코드(내부 구현체)를 비교해 보면, 다른 함수들과 char[] 함수 사이에 중요한 차이가 딱 하나 있습니다.

바로 String.valueOf()의 유무입니다.

 

요약

- 다른 객체나 배열들은 String.valueOf()->toString()이 호출되며 주소값으로 변환함.

- char[ ]은 전용 메서드를 통해 그 함정을 우회하여 I/O 스트림에 배열 자체로 전달되어 문자열처럼 변환되어 출력될 수 있음.

 


 

 

다른 배열(예: int[ ], double[ ])이 들어올 때

println(int[]) 전용 메서드는 없기 때문에 가장 포괄적인 println(Object x)를 호출함.

public void println(Object x) {
        String s = String.valueOf(x);
        if (getClass() == PrintStream.class) {
            writeln(String.valueOf(s));
        } else {
            synchronized (this) {
                print(s);
                newLine();
            }
        }
    }

 

작동 원리:

String.valueOf(x)는 객체가 들어오면 내부적으로 그 객체의 toString() 메서드를 호출함.

배열 객체의 기본 toString()은 [I@15db9742 같은 '메모리 주소값(해시코드)'을 반환함.

 


 

char[ ]이 들어올 때

따로 Overloading된 println(char[] x)를 호출함.

    public void println(char[] x) {
        if (getClass() == PrintStream.class) {
            writeln(x);
        } else {
            synchronized (this) {
                print(x);
                newLine();
            }
        }
    }

 

 

작동원리:

여기서는 String.valueOf(x)로 변환하는 과정을 건너뛰고, x (char 배열 자체)를 그대로 writeln()이나 print() 내부로 전달함.

이렇게 던져진 char[]은 자바의 I/O(입출력) 시스템 가장 밑단으로 내려가게 되는데,

자바의 출력 스트림들은 char[ ] 데이터를 받으면 주소값을 출력하는 게 아니라

텍스트 데이터라고 인식해서 배열 안의 문자들을 하나씩 스트림에 밀어 넣어 순회 출력하도록 설계되어 있음!

저작자표시 (새창열림)

'Java' 카테고리의 다른 글

[Java] JVM 메모리 구조로 보는 자바의 본질 / 객체지향의 특성별 예시  (0) 2026.04.06
[Java] 배열 / 2차원 배열 / 가변 배열  (0) 2026.03.20
[Java] 자바의 원칙 vs 편의성: 철학을 깬 복합 대입 연산자, char 배열 출력과 철학을 지킨 for-each문  (0) 2026.03.19
[Java] while문 / 분기 처리-break, continue  (0) 2026.03.18
[Java] 제어문-if, switch / 반복문-for, while / 랜덤 함수 사용법 / final  (4) 2026.03.17
'Java' 카테고리의 다른 글
  • [Java] JVM 메모리 구조로 보는 자바의 본질 / 객체지향의 특성별 예시
  • [Java] 배열 / 2차원 배열 / 가변 배열
  • [Java] 자바의 원칙 vs 편의성: 철학을 깬 복합 대입 연산자, char 배열 출력과 철학을 지킨 for-each문
  • [Java] while문 / 분기 처리-break, continue
미우딩
미우딩
다양한 프로그래밍 언어를 공부하고 있는 공대생입니다! Python, Java, C언어를 주로 공부하고 있으며 Figma를 통한 디자인도 종종 올릴 예정입니다.
  • 미우딩
    미우의 코딩 기록
    미우딩
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • Java (47)
      • C언어 (0)
      • 대외활동 (5)
      • Spring (4)
      • 프로젝트 (2)
      • 앱개발 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Spring #정적컨텐츠 #MVC #템플릿엔진 #API #애너테이션
    IT #알고리즘 #코딩테스트 #퀵정렬 #오름차순정렬
    IT #알고리즘 #그리디알고리즘 #탐욕알고리즘 #코테
    IT #코딩테스트 #알고리즘 #버블정렬 #오름차순
    IT #코딩테스트 #알고리즘 #DFS #재귀함수 #무방향그래프
    IT #큐 #알고리즘 #코딩테스트 #자바 #선입선출
    IT #코딩테스트 #알고리즘 #스택 #
    IT #알고리즘 #코딩테스트 #선택정렬 #내림차순정렬 #최댓값
    IT #백준 #알고리즘 #코딩테스트 #배열 #형변환 #평균구하기
    push #pop #StringBuffer
    IT #백준 #코딩테스트 #알고리즘 #구간합 #반복문
    IT #알고리즘 #코딩테스트 #우선순위큐 #힙 #절댓값 #오름차순 #정렬
    IT #알고리즘 #코딩테스트 #DFS
    BufferedReader
    IT #알고리즘 #코딩테스트 #삽입정렬 #오름차순정렬
    IT #코딩테스트 #알고리즘 #슬라이딩윈도우 #투포인터 #함수
    IT #코딩테스트 #알고리즘 #백준 #투포인터 #배열
    android #java #kotlin #compose
    IT #백준 #알고리즘 #코딩테스트 #배열 #형변환 #아스키코드
    android #java #kotlin #상태관리
    IT #BFS #코딩테스트 #구현 #큐 #재귀함수
    IT #코딩테스트 #알고리즘 #투포인터 #시간제한 #Scanner #BufferedReader #StringTokenizer
    IT #코딩테스트 #이진탐색 #알고리즘
    java #android #개발자
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
미우딩
[Java] println(char[ ] 배열명)에서 주소 값이 아닌 텍스트가 나오는 이유
상단으로

티스토리툴바