티스토리 뷰
반응형
// 배열의 예제
public class JavaEx17 {
public static void main(String[] args) {
int arrPriInt[] = { 1, 2, 3, 4, 5 }; // 1차원(Dimension) 배열을 선언과 동시에 할당(대입)
// int arrPriInt[] = new int[5]; // 1차원(Dimension) 배열을 선언과 동시에 할당(대입)
// 배열의 크기(length)
System.out.println("배열 arrPriInt의 크기 : " + arrPriInt.length);
// 구성요소(element) 갯수, 배열의 크기 ;
// ex) for문의 한계치 for (int i=0; i<arrPriInt.length; i++)
// 배열 요소의 값 인쇄
System.out.println("배열 arrPriInt[0]의 값 : " + arrPriInt[0]);
// 배열(객체; 동적 변수)의 메모리 주소 값(16진수:hexa-decimal) 인쇄
System.out.println("배열 arrPriInt 의 값 : " + arrPriInt);
String [] arrStr = new String[5];
System.out.println("배열 arrStr 의 값 : " + arrStr);
// Ljava.lang.String;@1fb8ee3 ; 클래스 명 + 주소
// 배열(객체)의 대입
int arrPriInt2[] = new int[5]; // arrPriInt와 같은 형태(Type)
// arrPriInt2[0] = arrPriInt[0]; // 배열의 값을 배열 요소에 대입(할당)
arrPriInt2 = arrPriInt; // 배열 (객체) 주소값을 넘김(할당, 대입)
// 위의 결과와 같은 계산 ; 배열 요소의 값을 일일이 대입
// for (int i=0; i<arrPriInt.length; i++)
// arrPriInt2[i] = arrPriInt[i];
System.out.println("배열 arrPriInt2[2] 의 값 : " + arrPriInt2[2]);
// 특이한 배열의 사례
Object[] arrObj = { new String[5], new Integer[5], arrPriInt2 };
// arrObj[0] = 1;
// arrObj[0] = "2012";
arrObj[2] = "2012";
System.out.println("배열 arrObj[2] 의 값 :" +arrObj[2]); // Object 자료형의 [0]번째 요소
// Object 형은 모든 데이터를 다 유입시킬 수 있다.
// 위와 같은 형태의 배열은 문법적으로는 가능하지만 현실적으로는 사용하지 않는
// 형태. JVM의 해석상의 결함이 드러나는 부분이다.
// 위의 사례를 극복 : 아래의 경우는 문법적으로 정확히 적용됨!
Integer [] arrInt = new Integer[5];
Object[][] arrObj2 = { new String[5], new Integer[5], arrInt};
//arrObj2[0][0] = "123";
// arrObj2[1][0] = "123";
// System.out.println("배열 arrObj2[1][0] 의 값 :" +arrObj2[1][0]);
/*************************************************************************
* Exception in thread "main" java.lang.ArrayStoreException: java.lang.Integer
* at JavaEx8.main(JavaEx8.java:58)
* 또는
* Exception in thread "main" java.lang.ArrayStoreException: java.lang.String
* at JavaEx8.main(JavaEx8.java:58)
* 잘못된 자료형(타입)으로 배열에 대입(할당)되었을 때 발생하는 예외처리(클래스)
**************************************************************************/
// 배열(객체 자체)의 형변환(casting)
Object[] arrObj3 = new Object[3];
String[] arrStr3 = new String[3];
Integer[] arrInteger = new Integer[3];
int[] arrPriInt4 = new int[3];
// arrObj3[0] = "1234";
// arrStr3 = arrObj3; (X)
// arrStr3 = (String)arrObj3; (X)
// arrStr3 = (String[])arrObj3;
// System.out.println("arrStr3[0]의 값 : "+arrStr3[0]);
// 문법구문상으로는 오류가 없으나 예외처리됨
/**
* Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
* at JavaEx8.main(JavaEx8.java:81)
*
* Object 배열 -> String 배열 형변환 (X)
* Object는 String 클래스의 아버지(super) 클래스(class)
**/
arrStr3[0] = "1234";
arrObj3 = arrStr3; // String 배열 -> Object 배열(자동적으로 형변환 : casting)
System.out.println("배열 arrObj3[0]] 의 값 :" +arrObj3[0]);
}
}
결과값
배열 arrPriInt의 크기 : 5
배열 arrPriInt[0]의 값 : 1
배열 arrPriInt 의 값 : [I@c17164
배열 arrStr 의 값 : [Ljava.lang.String;@1fb8ee3
배열 arrPriInt2[2] 의 값 : 3
배열 arrObj[2] 의 값 :2012
배열 arrObj3[0]] 의 값 :1234
반응형
'IT & programming > Java' 카테고리의 다른 글
8월 3일 - java 필기 (0) | 2012.08.03 |
---|---|
8월 2일 - (java) 외부인자 / 평균 / 총점 출력 예제 (0) | 2012.08.02 |
8월 2일 - JVM 기본구조 (0) | 2012.08.02 |
8월 2일 - (java) 이클립스, 치환(Replace) 방법 (0) | 2012.08.02 |
8월 2일 - 필기 (0) | 2012.08.02 |
댓글