티스토리 뷰

반응형

 

// 배열의 예제

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

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31