답변:
[Ljava.lang.Object;
의 이름입니다 Object[].class
, (가) java.lang.Class
의 배열의 클래스를 나타내는 Object
.
명명 체계는 다음에 문서화되어 있습니다 Class.getName()
.
이 클래스 객체가 배열 유형이 아닌 참조 유형을 나타내는 경우 Java 언어 사양 ( §13.1 )에 지정된대로 클래스의 이진 이름이 반환됩니다 .
이 클래스 객체가 기본 유형 또는을 나타내는 경우
void
반환 된 이름은 기본 유형 또는에 해당하는 Java 언어 키워드void
입니다.이 클래스 객체가 배열 클래스를 나타내는 경우 이름의 내부 형식은
'['
배열 중첩의 깊이를 나타내는 하나 이상의 문자가 앞에 오는 요소 유형의 이름으로 구성됩니다 . 요소 유형 이름의 인코딩은 다음과 같습니다.Element Type Encoding boolean Z byte B char C double D float F int I long J short S class or interface Lclassname;
당신의 것이 그 목록의 마지막입니다. 여기 몇 가지 예가 있어요.
// xxxxx varies
System.out.println(new int[0][0][7]); // [[[I@xxxxx
System.out.println(new String[4][2]); // [[Ljava.lang.String;@xxxxx
System.out.println(new boolean[256]); // [Z@xxxxx
toString()
배열 의 메서드 String
가이 형식으로 반환 되는 이유는 배열 이 다음과 같이 지정된 @Override
에서 상속 된 메서드 가 아니기 때문입니다 Object
.
toString
클래스의 방법은Object
객체가 인스턴스, 상기 서명 문자 '로되어있는 클래스의 이름 구성된 문자열 (@), 및 오브젝트의 해시 코드의 부호 없음 16 진 표현을 반환합니다. 즉,이 메서드는 다음 값과 같은 문자열을 반환합니다.getClass().getName() + '@' + Integer.toHexString(hashCode())
참고 :toString()
위의 사양을 따르기 위해 임의의 객체에 의존 할 수는 없습니다. 왜냐하면 그들은@Override
다른 것을 반환할 수 있고 일반적으로 그렇게 할 수 있기 때문입니다. 임의의 객체 유형을 검사하는보다 안정적인 방법은 객체getClass()
(에서final
상속 된 메서드)를 호출Object
한 다음반환 된객체에 반영 하는 것Class
입니다. 그러나 이상적으로는 API가 리플렉션이 필요하지 않도록 설계되어야합니다 ( Effective Java 2nd Edition, Item 53 : Prefer interfaces to reflection 참조 ).
toString
어레이에 대한 보다 "유용한"java.util.Arrays
제공 toString
원시적 배열과에 대한 오버로드 Object[]
. 또한이 deepToString
중첩 된 배열에 사용할 수 있음.
여기 몇 가지 예가 있어요.
int[] nums = { 1, 2, 3 };
System.out.println(nums);
// [I@xxxxx
System.out.println(Arrays.toString(nums));
// [1, 2, 3]
int[][] table = {
{ 1, },
{ 2, 3, },
{ 4, 5, 6, },
};
System.out.println(Arrays.toString(table));
// [[I@xxxxx, [I@yyyyy, [I@zzzzz]
System.out.println(Arrays.deepToString(table));
// [[1], [2, 3], [4, 5, 6]]
다른 많은 어레이 관련 유틸리티 메소드 중에서도 요소별로 어레이 동등성 비교를 수행하는 Arrays.equals
및 이 있습니다 Arrays.deepEquals
.