배열은 선언한 뒤에 바로 초기화하는 것이 아니라 할당을 해주어야 한다.
⭐ 배열의 크기는 할당된 뒤에 바뀔 수 없다.
메모리는 효율적인 관리를 위해 Stack, Heap, Static 영역으로 나뉘어서 저장이 이루어지고 있다. 일반적인 변수들은 Stack 영역에 저장되고, new 연산자에 의해서 동적으로 할당된 메모리는 Heap 영역에 저장된다.
⭐ Heap 영역에 할당된 공간은 비어있을 수 없다 !
→ 컴파일러에 의해 해당 자료형의 기본값으로 자동 초기화
int[] arr = {1, 2, 3, 4, 5};
int[] arr = new int[] {1, 2, 3, 4, 5};
String[] fruit = {"사과", "포도", "참외"};
얕은 복사
: 객체의 주소값만 가져와 참조형 변수에 저장하고 하나의 객체를 두 변수가 참조하는 것
→ 객체의 매개변수, 반환형을 전달할 때 사용
int[] arr1 = new int[4];
int[] arr2 = arr1;
깊은 복사
: 새로운 배열 객체를 생성하여 기존 배열의 데이터를 복사하는 것
→ 원본 데이터를 유지하거나 원본과 똑같은 배열이 필요할 때 사용
for (int i = 0; i < arr1.length; i++) arr2[i] = arr1[i];
System.arraycopy(src, srcPos, dest, destPos, length);
Arrays.copyOf(original, newLength);
Arrays.copyOfRange(original, from, to);
arr1.clone();
배열 안에 저장된 값들을 오름차순으로 정렬해주는 메서드
숫자 - 알파벳 - 한글
순으로 정렬됨import java.util.*;
public class Main {
public static void main(String[] args) {
// 배열 초기화 - 선언과 동시에 초기화
String[] strArr = { "치킨", "피자", "족발" }; // 크기가 3인 공간 생성, 값 초기화
char[] charArr = new char[] { 'a', 'b', 'c', 'd', 'e' };
// 전체 출력 - String 자체로 뽑아오는 것
System.out.println(Arrays.toString(strArr));
System.out.println(Arrays.toString(charArr));
// 깊은 복사 - arraycopy()
int[] originArr1 = { 1, 2, 3, 4, 5 };
int[] copyArr1 = new int[10];
// src : 원본 배열
// srcPos : 원본 배열의 복사할 시작점
// dest : 카피 배열
// destPos : 카피 배열의 붙여넣기 시작점
// length : 원본 배열에서 가져올 길이
System.arraycopy(originArr1, 0, copyArr1, 0, originArr1.length);
// 깊은 복사 - Arrays.copyOf()
int[] originArr2 = { 1, 2, 3, 4, 5 };
// 할당하지 않고 바로 사용
// 깊은 복사는 가능하지만 배열의 크기는 늘어나게 만들 수 없음
int[] copyArr2 = new int[10];
// original : 원본 배열
// newLength : 복사할 길이
// 무조건 원본 배열의 0부터 시작
// 값을 대입시켜야 함
copyArr2 = Arrays.copyOf(originArr2, originArr2.length);
// copyArr2는 originArr2를 복사하여 새롭게 생긴 객체를 참조하게 되었으므로 길이 5
// 깊은 복사 - Arrays.copyOfRange()
int[] originArr3 = { 1, 2, 3, 4, 5 };
int[] copyArr3 = new int[10];
// original : 원본 배열
// from : 복사할 범위의 시작 인덱스
// to : 복사할 범위의 최종 인덱스
copyArr3 = Arrays.copyOfRange(originArr3, 0, 5);
}
}
객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴하는 메서드
System.out.print(배열명); ← 배열의 주소값 출력