참조타입이란 객체의 메모리 번지를 참조하는 타입이다. (기본 타입은 값을 저장)
배열, 열거, 클래스, 인터페이스 타입이 있다.
변수 - 메모리 주소 : 스택영역 / 실제 저장 : heap영역

참조 타입의 값 비교 (+String)
int [] arr1 = new int[] {1,2,3};
int [] arr2 = new int[] {1,2,3};
int [] arr3 = arr2 // 배열 복사, 같은 번지값 참조
System.out.println("arr1 == arr2"); // false
System.out.println("arr2 == arr3"); // true
String의 경우엔, 문자열 리터럴이 동일하다면 String 객체를 공유하도록 설계됨- new 연산자 사용 안 한다 가정
name1 == namw2 // true
// 같은 객체든 상관없이 내부 문자열 비교
name1.equals(name2); // true
! name1.equals(name2); // false
배열의 길이는 늘리거나 줄일 수 없다.
int[] arr = new int[30]; // int의 경우 이렇게 선언하면 0으로 초기화됨. String은 null
선언/초기화 시, 주의사항
int [] arr = {1,2,3,4,5}; // O
int [] arr;
arr = {1,2,3,4,5}; // 컴파일 에러
arr = new int[] {1,2,3,4,5}; // O 선언과 초기화 시점이 다르다면 new 키워드를 활용
// 메서드 관련
void printItem(int[] arr) {
}
printItem( {1,2,3,5} ) // X
printItem( new int[] {1,2,4,5} ) // O
배열변수.length 로 배열의 길이를 구할 수 있다.
arraycopy() or 향상된 for문 사용package practiceJAVA;
public class CopyOfArray {
public static void main(String[] args) {
int [] arrInt = {1,2,3,4,5};
String [] arrStr = {"최수정","차수림","윤원빈","허진주"};
int [] arrIntCopired = new int[5]; // 복사 대상보다 같거나 크게 공간 설정
String [] arrStrCopierd = new String[5];
/**
* basic : for문
*/
for(int i=0; i<arrInt.length; i++){
arrIntCopired[i] = arrInt[i];
}
System.out.print("basic copy result: ");
printInt(arrIntCopired);
/**
* arraycopy 메서드 활용
*/
System.arraycopy(arrStr, 0, arrStrCopierd, 0, arrStr.length);
System.out.print("arraycopy method result: ");
printStr(arrStrCopierd);
/**
* for each문 활용
*/
int sum = 0;
for (int a : arrInt) {
sum += a;
}
System.out.printf("for-each문 sum 구하기: %d \n", sum);
}
public static void printInt(int[] arr) {
for(int i=0; i<arr.length; i++) {
System.out.print(arr[i] + ", ");
}
System.out.println();
}
public static void printStr(String [] arr) {
for(int i=0; i<arr.length; i++) {
System.out.print(arr[i] + ", ");
}
System.out.println();
}
}