1. 변수 값의 교환
x 값을 y 값으로 변경하고 y 값을 x 값으로 변경하려는 경우 가장 좋은 방법은 무엇입니까? 이렇게 변경하십시오.
int x = 10;
int y = 20;
int temp = x; // x의 값을 temp에 보관
x = y; // x가 y의 값을 가진다.
y = temp; // y가 x의 값을 가진다.
2. 참조형 메모리 사용 원리
- 기본 유형 변수는 변수 내부에 실제 값을 저장합니다.
- 참조 유형(배열, 열거형, 클래스, 인터페이스 변수)은 메모리 주소를 변수에 저장합니다. 주소를 통해 객체를 참조하기 때문에 참조 유형이라고 합니다.
먼저 JVM 메모리가 무엇인지 알아보자.

JVM 메모리 영역은 메소드 영역, 힙 영역, 스택 영역으로 구분된다.
- 메서드 범위는 JVM이 시작될 때 생성되며 모든 스레드에서 공유됩니다.
- 객체와 배열은 힙 영역에 생성됩니다. (이해하기 쉽도록 객체를 생성하고 저장하는 곳이라고 생각합니다.)
- 스택 영역은 힙 영역에서 생성된 객체의 주소가 참조되는 곳으로 메모리 주소(주소)는 변수에 저장된다.
3. ==, != 기준 변수 계산
==, != 동일한 객체인지 다른 객체인지 확인하는 데 사용됩니다. 따라서 주소 값이 비교됩니다.

위의 그림에서 refVar1과 refVar2는 서로 다른 개체를 참조하므로 == 및 != 작업은 어떻습니까?
refVar1 == refVar2 // false
refVar1 != refVar2 // true
refVar2 == refVar3 // true
refVar1과 refVar2는 서로 다른 객체를 바라보기 때문에 다르고, refVar2와 refVar3는 같은 객체를 바라보고 주소 값이 같기 때문에 다릅니다.
4. null 및 NullPointException
- 참조 유형 변수 null 값을 가질 수 있습니다. 즉, 힙의 개체를 참조하지 않습니다.
- 0 값도 초기값으로 사용할 수 있으므로 스택 영역에는 0 값으로 초기화된 참조 변수가 생성됩니다.
- 참조 변수를 사용할 때 가장 흔한 실수 중 하나 NullPoint 예외있다
- . : 주소 액세스 또는 개체 액세스 연산자오전. 필드 및 메소드에 대한 액세스를 제공합니다. . 그런 다음 개체에 있는 액세스 가능한 필드 및 메서드 목록을 표시합니다.
- 사용법: 변수 이름 . 분야 명; , 변수 이름 . 메소드 이름(매개변수);
public static void main(String() args) {
String name = null;
System.out.println(name.length());
// NullPointerException오류가 뜬다.
}
이와 같이 널 상태에 존재하지 않는 객체의 데이터(필드)나 메서드를 사용하는 코드를 실행하면, NullPoint 예외일어난다
5. 신규 오퍼레이터
public static void main(String() args) {
String name1 = "우건김";
String name2 = "우건김";
if(name1 == name2) {
System.out.println("둘은 같다."); // 둘은 같다고 출력
}
}
Java의 String 리터럴이 위와 같으면 String 개체가 공유되고 참조되므로 둘은 동일합니다. 그러나 new 연산자를 사용하여 직접 String 개체를 만들 수 있습니다.
new 연산자는 힙 공간에 새 개체를 만드는 데 사용되며 개체 생성 연산자라고 합니다.
public static void main(String() args) {
String name1 = "우건김";
String name2 = "우건김";
String name3 = new String("우건김");
System.out.println(name1 == name2); // true
System.out.println(name2 == name3); // false
}
동일한 String 리터럴을 사용하여 String 개체를 만들면 == 연산의 결과는 true이지만 new 연산자를 사용하여 String 개체를 만들면 == 연산의 결과는 false입니다.
– .equals() 메서드
이 메서드는 내부 문자열이 동일한 String 개체인지 다른 String 개체인지 여부를 비교하려는 경우에 사용됩니다.
public static void main(String() args) {
String name1 = "우건김";
String name2 = "우건김";
String name3 = new String("우건김");
boolean res = name1.equals(name3); // 메서드 사용
System.out.println(res); // true
}
6. 기타
- String 변수는 참조형이므로 초기 값으로 null을 지정할 수 있으며, 이 경우 null은 String 변수가 참조하는 String 개체가 없음을 의미합니다.
- 다음 코드에서와 같이 취미 변수는 String 개체를 참조하지만 null을 할당하여 더 이상 String 개체를 참조하지 않도록 할 수 있습니다.
String hobby = "축구"
hobby = null;
위와 같이 자신의 참조를 잃어버린 문자열 객체는 JVM에 의해 가비지 객체로 처리되고 가비지 컬렉터를 실행하여 자동으로 메모리에서 제거됩니다.