같은 타입의 여러 변수를 하나의 묶음으로 모아놓은 것!
위 처럼 같은 타입에 관련이 있는 여러 변수들을 하나의 묶음으로 할당할 수 있습니다.
배열은 선언과 생성으로 구분됩니다.
선언: 배열의 주소가 저장되는 장소, 즉 배열을 다루는데 필요한 변수
생성: 배열의 값을 저장할 공간이 생성
public static void main(String[] args) {
int[] arr; // 배열 선언
arr = new int[5]; // 5개의 int 값을 저장할 수 있는 공간 생성
}
물론 선언과 동시에 공간을 생성하고 또 값을 초기화 할 수도 있습니다.
public static void main(String[] args) {
int[] arr = new int[5];// 선언과 동시에 생성
}
초기화
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};// 선언과 동시에 생성
}
똑같은 배열을 복사하고 싶다면?
public static void main(String[] args){ int[] arr = {1,2,3,4,5}; int[] arr2 = arr; // 가능할까? arr[2] = 100; System.out.println(Arrays.toString(arr2)); } > [1, 2, 100, 4, 5]
arr2도 같은 값을 가집니다. 하지만 단순히 주소를 복사한 것이기 때문에 arr, arr2는 같은 메모리 주소를 바로보고 있습니다.
그래서 arr의 값을 바꾼다면 arr2에서 호출할 때 바뀐 값이 나올 것 입니다.
배열을 다루기 위한 유용한 메소드들이 있습니다. 배열 자체의 메소드와 Arrays 객체의 메소드를 활용해서 사용하게 됩니다.
배열.length
public static void main(String[] args){
int[] arr = {1,2,3,4,5};
System.out.println(arr.length);
>> 5
}
Arrays.toString(배열)
public static void main(String[] args){
int[] arr = {1,2,3,4,5};
System.out.println(Arrays.toString(arr));
>> [1,2,3,4,5]
}
// toString, deepToString, equals, deepEquals
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
int[] arr2 = {1,2,3,4,5};
int[][] arr2D = {{1,2,},{3,4}};
int[][] arr2D2 = {{1,2,},{3,4}};
System.out.println("Arrays.toString(arr) : " + Arrays.toString(arr));
System.out.println("Arrays.equals(arr,arr2) : " + Arrays.equals(arr,arr2));
System.out.println("arr.equals(arr2) : " + arr.equals(arr2));
System.out.println("Arrays.deepToString(arr2D) : " + Arrays.deepToString(arr2D));
System.out.println("Arrays.deepEquals(arr2D, arr2D2) : " + Arrays.deepEquals(arr2D, arr2D2));
}
>> Arrays.toString(arr) : [1, 2, 3, 4, 5]
>> Arrays.equals(arr,arr2) : true
>> arr.equals(arr2) : false
>> Arrays.deepToString(arr2D) : [[1, 2], [3, 4]]
>> Arrays.deepEquals(arr2D, arr2D2) : true
배열의 주소가 아닌 배열의 값을 복사하는 방법
// 주소 복사 vs copyOf 사용 public static void main(String[] args) { int[] arr = {1,2,3,4,5}; int[] arr2 = arr; int[] arr3 = Arrays.copyOf(arr, arr.length); System.out.println("arr = " + arr); // 같은 메모리 주소 System.out.println("arr2 = " + arr2); // arr와 같은 메모리 주소 System.out.println("arr3 = " + arr3); arr[3] = 100; System.out.println("arr[3] = " + arr[3]); System.out.println("arr2[3] = " + arr2[3]); System.out.println("arr3[3] = " + arr3[3]); } > arr = [I@28d93b30 > arr2 = [I@28d93b30 > arr3 = [I@1b6d3586 > arr[3] = 100 > arr2[3] = 100 > arr3[3] = 4
String은 문자열이라고 부르면 기본 자료형과 다른 클래스(객체)입니다.
String은 char배열에 기능(메서드)를 추가한 것
public static void main(String[] args) {
//String 메소드
String string = "ABCDE";
System.out.println("string.charAt(3) = " + string.charAt(3)); // 문자열에서 특정 인덱스 문자 구하기
System.out.println("string.substring(1,3) = " + string.substring(1,3)); // 문자열에서 특정 문자열을 인덱스 범위로 구하기
System.out.println("string.equals(\"ABCDE\") = " + string.equals("ABCDE")); // 문자열 비교
char[] charArr = string.toCharArray(); // 문자열에서 char배열로 바꾸기
System.out.println("charArr.toString() = " + charArr.toString());
System.out.println("string.toCharArray().toString() = " + string.toCharArray().toString());
}
>> string.charAt(3) = D
>> string.substring(1,3) = BC
>> string.equals("ABCDE") = true
>> charArr.toString() = [C@28d93b30
>> string.toCharArray().toString() = [C@1b6d3586
// 정렬
public static void main(String[] args) {
int[] arr = {3, 2, 5, 4, 1};
Arrays.sort(arr);
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
}
Arrays.toString(arr) = [1, 2, 3, 4, 5]