자바에서 배열도 객체이고, 배열을 선언한다고 해서 값을 저장할 공간이 만들어지는 것이 아니라 실제 메모리상의 배열을 가리키는 포인터가 만들어진다.
배열 선언
//타입[] 변수명으로 선언 int [] numberArray; //타입 변수명 [] 으로 선언 int numberArray[]; //특정 값 대입하며 배열 선언 int [] intArray = { 1, 2, 3, 4 }; int [] intArray = new int [] { 1, 2, 3, 4 }; //객체이므로 doubleArray에는 null이 대입된다. double [] doubleArray; //배열 생성해 할당하면(초기화) 배열의 주소가 들어가게 된다. doubleArray = new double[10]; //Boolean 형태로 배열을 선언하고 초기화하는 예제 boolean [] bitList; bitList = new boolean[10]; //기본값으로 초기화 Arrays.fill(bitList, false); //특정 값으로 초기화 //배열의 길이 bitList.length // 10
배열을 주소형태로 파라메터값으로 넘기기
C언에서는 파라메터로 배열 등의 포인터를 전달해줄 수 있는데, 마찬가지로 동일하게 자바에서도 파라메터로 주소값을 넘길 수 있다.
class MainClass { public static void main( String [] args ) { .... new MainClass().printScore( args ); } public void printScore( String [] args ) { ...... } }
배열 정렬
Arrays.sort( 배열명 );
클래스 배열 선언
//클래스 배열 3개 선언 Test [] test = new Test[3]; System.out.println( test[0] ); // 각 배열에는 아직 NULL값만 존재한다. System.out.println( test ); // 그러나 여기에는 주소값이 들어가있다!! test[0] = new Test(); //이제야 객체가 들어간다. NULL값 대신 주소값이 들어가있다.
2차원 배열 선언
int [] [] intArrays = new int [행][열]; intArrays // 여기에는 주소값이 들어있다. intArrays[0] // 여기에도 주소값이 들어있다. intArrays[0][0] // 여기에는 0이 들어간다. intArrays.length // 행의 갯수를 리턴한다. intArrays[0].length // 이때는 열의 갯수를 리턴한다. //다차원 배열의 할당 선언 boolean [] [] booleanArrays = { {true, true}, {false, false, false}, ... };
새롭게 바뀐 배열의 반복문
for( 배열타입 임시변수이름 : 돌리고 싶은 배열 이름 ) { System.out.print( 임시변수이름 ); } //실제 예 for( int i : intArray ) { System.out.print( i ); //배열의 각 값이 i에 담겨진다. }
새롭게 바뀐 배열의 반복문의 2차원 배열 적용
for( String [] s : stringArrays ) // 행을 가져오기 for( String t : s ) // 열을 가져오기 System.out.print( t ); //2차원 배열의 각 값이 t에 담겨진다.
2차원 배열 선언에 대한 고찰
public class ArrayTest { public static void main(String[] args) { /** * 정상적인 2차원 배열 선언 */ Object[][] Test = new Object[3][]; System.out.println(Test.length); //현재 Test 배열의 크기이므로 3이 출력된다. for(int i=0; i<Test.length;i++) { Test[i] = new Object[3]; Test[i][0] = i + " - 0"; Test[i][1] = i + " - 1"; Test[i][2] = i + " - 2"; } for(int i=0; i<Test.length;i++) { System.out.print(Test[i][0] + "\t"); System.out.print(Test[i][1] + "\t"); System.out.println(Test[i][2]); } /** * 비정상적인 2차원 배열 선언 */ Object[] Test2 = new Object[3]; System.out.println(Test2.length); //현재 Test 배열의 크기이므로 3이 출력된다. for(int i=0; i<Test2.length;i++) { Test2[i] = new Object[3]; //아래 구문은 오류가 난다!!!! //즉 1차원 배열 안에 또다시 배열을 넣는 것은 불가능하다. Test2[i][0] = i + " - 0"; //오류! Test2[i][1] = i + " - 1"; //오류! Test2[i][2] = i + " - 2"; //오류! //위의 정상적인 선언처럼 처음부터 2차원 배열로 선언후, //다시 그 안에 1차원 배열을 넣는 것이 정상적이다. } } }