본문 바로가기
학습/JAVA

5. 참조 타입

by Elfen Lied 2022. 10. 4.
반응형

- 참조타입 변수 비교연산

public class ReferenceVarExample {

	public static void main(String[] args) {
		String var1 = "홍길동";  
		String var2 = "홍길동";  
		String var3 = new String("홍길동");  
		String var4 = new String("홍길동");  
		
		System.out.println(var1 == var2); // true
		System.out.println(var1 == var3); // false
		System.out.println(var3 == var4); // false
		System.out.println(var1.equals(var4)); // true
	}
}

 

 

 

- null과 NullPointException

- null

 

 

- NullPointerException

public class NullExample {

	public static void main(String[] args) {
		String str = null;
		int size = str.length();
		System.out.println(size);
		System.out.println("종료");
	}
}

 

 

 

- String 타입

public class StringEqualsExample {
	
	public static void main(String[] args) {
		String strVar1 = "신민철";
		String strVar2 = "신민철";
		String strVar3 = new String("신민철");
		String strVar4 = new String("신민철");
		
		System.out.println("strVar1, strVar2 : ");
		isRefEquals(strVar1, strVar2);
		System.out.println("strVar1, strVar2 : ");
		isValueEquals(strVar1, strVar2);
		
		System.out.println("strVar3, strVar4 : ");
		isRefEquals(strVar3, strVar4);
		System.out.println("strVar3, strVar4 : ");
		isValueEquals(strVar3, strVar4);
	}
	
	private static void isRefEquals(String var1, String var2) {
		if(var1 == var2) {
			System.out.println("두 변수의 참조값이 같음");
			return;
		}
		System.out.println("두 변수의 참조값이 다름");
	}

	private static void isValueEquals(String var1, String var2) {
		if(var1.equals(var2)) {
			System.out.println("두 변수의 값이 같음");
			return;
		}
		System.out.println("두 변수의 값이 다름");
	}
}

값
strVar1, strVar2 : 
두 변수의 참조값이 같음
strVar1, strVar2 : 
두 변수의 값이 같음

strVar3, strVar4 : 
두 변수의 참조값이 다름
strVar3, strVar4 : 
두 변수의 값이 같음

 

 

 

- 배열 타입

배열이란?

public class ArrayExample {

	public static void main(String[] args) {
		int[] scores = {83, 90, 87, 70, 75};
		
		System.out.println("scores[0] : " + scores[0]);
		System.out.println("scores[1] : " + scores[1]);
		System.out.println("scores[2] : " + scores[2]);
		System.out.println("scores[3] : " + scores[3]);
		System.out.println("scores[4] : " + scores[4]);
	}
}

 

 

- for반복문으로 배열

public class ArrayExample2 {

	public static void main(String[] args) {
		int[] scores = {83, 90, 87, 70, 75, 90};
		// 배열의 길이 : 요소의 개수(5개)
		
		System.out.println("배열의 길이 : " + scores.length);
		
		for(int i=0; i<scores.length; i++) {
			System.out.println(scores[i]);
		}
	}
}

length를 써서 요소의 길이를 알수있다.

[] 괄호는 변수 뒤에 붙여도 됨 (int scores[];)

 

 

- {}를 이용한 값의 목록으로 배열 생성

  • 선언과 초기화를 분리할 수 없음
  • 재할당 불가능
public class ArrayExample5 {

	public static void main(String[] args) {
		
		// {}이용한 배열 생성 방식은 선언과 초기화를 분리할 수 없다.
		int[] scores; // 선언
		// scores = {10, 20, 30, 40}; // 컴파일 에러
		
		// 또한 배열 값을 재할당할 수 없다.
		String[] names = {"홍길동", "김길동"};
		// names[] = {"박길동", "나길동"}; // 컴파일 에러

	}
}

 

 

할당을 하려면 반드시 new 연산자를 사용해야 한다.

public class ArrayExample6 {

	public static void main(String[] args) {
		
		// 선언과 초기화를 분리하려면 초기화시 new 연산자를 사용해야 한다.
		int[] scores;
		scores = new int[] {100, 70, 50};
		for(int i=0; i<scores.length; i++) {
			System.out.println(scores[i]);
		}
		
		// 배열 변수에 값을 재할당 하려면 new 연산자를 사용해야 한다.
		String[] names = {"홍길동", "김길동"};
		names = new String[] {"박길동", "고길동"};
		for(int i=0; i<names.length; i++) {
			System.out.println(names[i]);
		}
		
	}
}

 

 

- 메소드에 배열 전달

public class ArrayExample7 {

	public static void main(String[] args) {
		int[] myArr = {10, 20, 30, 40};
		int addAll = addAll(myArr);
		System.out.println(addAll);
		
		// 배열의 목록을 전달하려면 new 연산자를 사용해야 한다.
		int total3 = addAll(new int[] {80, 90, 100});
		System.out.println(total3);
	}
	
	public static int addAll(int[] arr) {
		
		int sum = 0;
		for (int i=0; i<arr.length; i++) {
			sum += arr[i];
		}
		return sum;
	}
}

값
100
270

 

 

 

- 다차원 배열

import java.util.Arrays;

public class ArrayInArrayExample {

	public static void main(String[] args) {
		int[][] arr = new int[3][6];
		arr = new int[][] {
			{11, 22, 54, 35, 75, 90},
			{18, 21, 64, 25, 52, 55},
			{14, 33, 44, 65, 85, 76}
		};
		
		System.out.println(arr[1][4]);
		System.out.println(arr.length);
		System.out.println(arr[0].length);
	}
}

값
52
3
6

 

- 반복문 사용

public class ArrayInArrayExample {
	public static void main(String[] args) {
		int[][] arr = new int[3][6];
		arr = new int[][] {
			{11, 22, 54, 35, 75, 90},
			{18, 21, 64, 25, 52, 55},
			{14, 33, 44, 65, 85, 76}
		};
		
		for(int i=0; i<arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				System.out.println(arr[i][j]);
			}
		}
		
	}
}

.

 

 

- System.arraycopy()

System.arraycopy(
	원본배열,
	원본배열의 몇 번 인덱스부터 복사할 지 ,
	새로운 배열, 
	새로운 배열의 몇 번 인덱스부터 붙여 넣을지, 
	몇 개의 항목을 복사할지,
)
public class ArrayCopyExample2 {

	public static void main(String[] args) {
		String[] oldStr = {"java", "mysql", "jsp", "oracle", "spring"};
		String[] newStr = new String[6];
		System.arraycopy(oldStr, 0, newStr, 0, oldStr.length);
		System.out.println(Arrays.toString(oldStr));
		
		String[] newStr2 = new String[6];
		// [null, null, null, null, null, null,]
		// 목표: [null, null, "mysql", "jsp", "oracle", null]
		System.arraycopy(oldStr, 1, newStr2, 2, 3);
		System.out.println(Arrays.toString(newStr2));
		
		System.out.println(oldStr[1] == newStr2[2]);
		System.out.println(oldStr[2] == newStr2[3]);
		System.out.println(oldStr[3] == newStr2[4]);
	}
}

값
[java, mysql, jsp, oracle, spring]
[null, null, mysql, jsp, oracle, null]
true
true
true

 

 

 

- 향상된 for문

public class ArrayCopyExample3 {

	public static void main(String[] args) {
		String[] list = {"java", "mysql", "jsp", "oracle", "spring"};
		
		for(String sub : list) {
			System.out.println(sub);
		}
		
	}
}
반응형

'학습 > JAVA' 카테고리의 다른 글

6. 클래스(생성자)  (0) 2022.10.05
5. 열거 타입  (0) 2022.10.05
4. 반복문(for문, while문, do-while문  (0) 2022.09.30
4. 조건문(if문, switch문)  (0) 2022.09.29
3. 연산자(3)  (0) 2022.09.29

댓글