PengTory

[Java] 참조타입/ String / 배열 본문

Java

[Java] 참조타입/ String / 배열

펭토리 2023. 3. 7. 09:59

참조타입

참조타입이란 기본타입과 다르게 객체의 번지(주소)를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스가 있다.

 - 배열, 클래스, 인터페이스 등
 - 동등비교 (== , !=)를 하는 경우에는 메모리 주소값으로 비교한다. (저장된 값으로 비교하는게 아님!)
 - null(참조하는 주소가 없는 경우)이 가능하다.

그렇다면 참고자료형인 객체를 비교하는 예시를 알아보자.

RefType rt = new RefType(); 
RefType rt2 = new RefType(); 
System.out.println(rt == rt2); // 결과값: false
RefType rt3 = rt2; 
System.out.println(rt3 == rt2); // 결과값: true


System.out.println(rt == rt2):  rt와 rt2의 타입은 RefType로 같다. 하지만 다른 객체이기 때문에 false이다. 객체는 모두 참고자료형이기 때문이다.
System.out.println(rt3 == rt2): 같은 번지이기 때문에 두 변수는 heap영역에 같은 위치를 가리키는 참조하는 상태가 된다. 따라서 비교시 true 출력된다.

 

String은 Java에서 다른 클래스와 약간 다르기 때문에 아래와 가팅 적용된다.

public class StringEx3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String a = new String();
		String b =a;
		System.out.println(a == b); // 출력값: true
		a = "안녕"; // String만 예외를 줘서 가능하게 만듬, 메모리의 새로운 저장소에 새롭게 저장시킴 
		System.out.println(a == b); // 출력값: false
		System.out.println(a); // 출력값: 안녕
		System.out.println(b); // 출력값: 
		
		System.out.println("-------------------------");
		
		Str a2 = new Str();
		Str b2 = a2;
		System.out.println(a2 == b2); // 출력값: true
		a2.name = "안녕";
		System.out.println(a2 == b2); // 출력값: true
		System.out.println(b2.name); // 출력값: 안녕

	}

}

class Str {
	String name;
}

 

String

 - 동등비교 시 반드시 equals() 메서드 사용하기
 - 불변(immutable) -> 만약 바꾸고 싶다면 문자열이 바뀌는게 아니라 새로운 메모리 공간을 차지하는 문자열이 새로 생기는 것이다. (느려짐)
 - 기능(메서드) : split, replace, indexOf, substring, valueOf(다른 타입을 String으로 바꿔주는 것) 등

String text = "안녕하세요, 저는 홍길동입니다.";
String text2 = text.replace(",", "");
String text3 = text2.replace(" ", "");
System.out.println(text3);
		
// 메서드 체이닝
String text4 = text.replace(",", "").replace(" ", ""); // text.replace(",", "")가 새로운 문자열을 리턴하고 그 리턴한 값에 replace를 진행하는 것

 

배열

- 하나의 타입만 가능
- 길이가 정해지면 변경 불가

- 인덱스(순번), 0부터 시작

- for문과 같이 사용: for(int i=0; i<배열변수.length; i++)

double[] arr2 = new double[4];
for (int i=0; i<arr.length; i++) {
    arr2[i] = arr[i];
}
for(int i=0; i<arr2.length; i++) {
    System.out.println(arr2[i]);
}
		
// 출력값
//1.2
//1.5
//1.0
//0.0

 

 

 

참조타입 이미지 출처

https://brownbears.tistory.com/519