일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 청크
- java
- defaultdict
- overriding
- Spring Framework
- 외부조인
- 121
- 스프링
- null
- 싱글톤
- ChainMap
- 파이썬
- 싱글톤 레지스트리
- spring
- 쓰는이유
- 리스트 자르기
- JIT
- PYTHON
- 데이터베이스
- orderedDict
- 자바
- 오버라이딩
- DAO
- 백준
- Oracle
- DAO의 분리
- react
- GCP Storage
- select
- 개발기록
- Today
- Total
PengTory
[Java] 참조타입/ String / 배열 본문
참조타입
참조타입이란 기본타입과 다르게 객체의 번지(주소)를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스가 있다.
- 배열, 클래스, 인터페이스 등
- 동등비교 (== , !=)를 하는 경우에는 메모리 주소값으로 비교한다. (저장된 값으로 비교하는게 아님!)
- 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
참조타입 이미지 출처
'Java' 카테고리의 다른 글
[Java] static과 instance (+ final, package) (0) | 2023.03.09 |
---|---|
[Java] 클래스 (필드/생성자/메서드) (0) | 2023.03.09 |
[Java] Compile언어 / Interpreter언어 / JIT / Java의 특징 (1) | 2023.03.02 |
객체지향 - 객체란? feat. 상태, 행동, 식별자 (0) | 2022.12.27 |
[Java] 오버라이딩(Overriding)이란? (0) | 2022.12.09 |