2011-08-10 5 views
2

이 코드Java - 배열 값, 메모리 주소 또는?

public static void main(String [] args){ 
    int c[] ={10,21,34,36,90,33,44,5}; 
    int tot = 0; 
    for(int i:c){ 
     System.out.println(c); 
    } 
} 

인쇄합니다

[[email protected] 
[[email protected] 
[[email protected] 
[[email protected] 
[[email protected] 
[[email protected] 
[[email protected] 
[[email protected] 

나는 내가 INT 변수를 출력하는데있어 알고 있지만, 나는 이것이 무엇을 의미하는지에 대한 궁금 해요. 감사합니다

+2

'System.out.println (i);'(print i가 아닌)을 사용해야합니까? – Arjan

+1

나는 그것을 안다. 나는 "c"가 그 결과를주는 이유를 묻고 있습니다. – Mob

답변

8

c의 내부 표현을 인쇄하고 있습니다. 본질적으로 [[email protected]은 중요한 두 가지로 나뉩니다. 먼저 [은 배열을 인쇄하고 있음을 나타냅니다. 둘째, I은 정수임을 나타냅니다. 따라서 정수 배열을 인쇄하고 있습니다! 정수 배열을 문자열 배열로 바꾸어보고 I이 그에 따라 대체되는지 확인하십시오. From this page :

배열의 클래스의 이름은 각 차원 플러스 배열의 형태를 나타내는 문자 또는 문자열 일 열린 대괄호가 있습니다. 예제의 경우 int 배열의 클래스 이름은 "[I"입니다. 3 차원 바이트 배열에 대한 클래스 이름은 이며 "[[[B". 객체의 2 차원 배열 인 의 클래스 이름은 "[[Ljava.lang.Object"입니다. 배열 클래스에 대한이 명명 규칙의 전체 내용은 입니다. 자세한 내용은 6 장, "Java 클래스 파일"을 참조하십시오.

+0

[JNI spec] (http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/types.html)의 "Type Signatures"섹션에 자세한 내용이 나와 있습니다. – vanza