2016-07-12 11 views
0

나는 어떻게 작동하는지 자바와 함께 놀고있다. 그러나 나는 어떤 종류의 주조에 대해 약간의 의구심이있다. 다음 코드 조각을 고려하십시오 자바 캐스팅 객체/문자열 배열

Object[][] o = null; 
String[] s = null; 

s = (String[]) o; // compile-time error: Cannot cast from Object[] to String[] 

왜 그렇게 않습니다 : 이제

String[][] s = null; 
Object[] o = null; 

o = (Object[][]) s; // compile-time correct 

를, 다음의 예를 고려? 나는 혼란스러워. 이것이 당신의 컴파일 오류를 제공하지 않습니다

+5

금액

String[] myStringArray = null; //instantiation not important Object someObj = myStringArray; //no problem since arrays are Objects 

'객체 []'에'문자열 []'. 'Object [] []'에서'String []'로 변환하려고합니다. –

+3

첫 번째 예제는'Object'가'Object' (모든 것이'Object')이기 때문에 작동합니다. – Gendarme

+1

다른 차원의 배열을 왜 캐스팅하는지 설명하십시오. 이것은 분명히 의미심장하지 않습니다. – martinhh

답변

1

결정적으로 (항상 그리고 항상있을 수 있음) 잘못 되었기 때문에 실패했습니다.

o에는 반드시 개체 배열이 있어야합니다. 이것들은 결코 문자열이 될 수 없습니다.

첫 샘플은 문자열 배열을 객체로 입력 할 수 있습니다.

"배열 중첩"을 제거하면이 사실을 알 수 있습니다. 고려 : 당신이 두 번째 예에서하고있는 것은 당신은에서 캐스팅하지 않을

Object[] myObjectArray = null; //instantiation not important 
String someString = myObjectArray; //compile time error, since an Object[] is never a String 
2

주의 사항 : String[]

Object[] o = null; 
String[] s = null; 

s = (String[]) o; 

Object[][] 호환되지 않는 유형의 오류를 줄 것이다.
Object[] ~ String[]이 정상적으로 작동합니다.