힙과 스택은 Java 데이터 구조에서 매우 중요한 개념입니다. 이 기사에서는 둘 사이의 차이점을 더 자세히 분석합니다. 당신의 참고를 위해. 자세한 내용은 다음과 같습니다.
Java의 힙은 클래스(객체들이 공간을 할당하는 런타임 데이터 영역입니다. 이러한 객체는 new, newarray, anewarray, multianewarray 등의 명령어를 통해 생성되며 프로그램이 필요하지 않습니다. 힙은 가비지 수집을 담당합니다. 힙의 장점은 메모리 크기를 동적으로 할당할 수 있다는 점과 런타임에 메모리를 동적으로 할당하기 때문에 수명을 미리 컴파일러에 알릴 필요가 없다는 것입니다. 그리고 Java의 가비지 컬렉터가 이를 자동으로 수집합니다. 단점은 런타임 시 메모리의 동적 할당으로 인해 액세스 속도가 느리다는 것입니다.
스택의 장점은 힙보다 액세스 속도가 빠르다는 것입니다. 두 번째로는 스택 데이터를 공유할 수 있지만 스택에 저장되는 데이터의 크기와 수명을 결정해야 하며 스택에는 주로 일부 기본 유형의 변수가 저장된다는 점입니다. (int, short, long, byte, float, double) 및 객체 핸들
스택의 매우 중요한 특징은 스택에 저장된 데이터를 공유할 수 있다는 것입니다. 동시에 정의합니다:
int a = 3;
int b = 3;
컴파일러는 먼저 int a = 3을 처리하고 스택에 변수 a에 대한 참조를 생성합니다. 그런 다음 스택에 3이라는 값이 있는지 검색합니다. 값이 없으면 3을 저장합니다. 그런 다음 a가 3을 가리킵니다. 그런 다음 이미 a가 있으므로 b의 참조 변수를 만든 후 int b = 3을 처리합니다. 스택에서 3의 값을 가지면 b는 직접 3을 가리키게 됩니다. 이렇게 하면 a와 b는 모두 3을 가리키게 됩니다. 3의 경우
이때, a=4로 설정하면 그런 다음 컴파일러는 스택에 4 값이 있는지 다시 검색합니다. 그렇지 않으면 4를 저장하고 이미 있으면 4를 가리킵니다. 따라서 이 주소를 직접 가리킵니다. a 값의 변경은 b 값에 영향을 미치지 않습니다.
이러한 종류의 데이터 공유는 두 개체의 참조가 동시에 하나의 개체를 가리킨다는 사실과 관련이 있습니다. 이 경우 a의 수정은 b에 영향을 미치지 않고 컴파일러에 의해 수행되므로 공간 절약에 도움이 되며 객체 참조 변수가 객체의 내부 상태를 수정하면 다른 객체 참조에 영향을 미치기 때문입니다.
String은
String str = new String("abc"); String str = "abc";
의 두 가지 형식으로 생성할 수 있는 특수 래퍼 클래스 데이터입니다. 힙에 저장될 새 객체를 생성합니다. 호출될 때마다 새 객체가 생성됩니다. 두 번째는 먼저 스택에 문자열을 생성하는 것입니다. 그런 다음 "abc"가 스택에 저장되어 있는지 확인합니다. 그렇지 않은 경우 "abc"를 스택에 저장하고 str이 "abc"를 가리키도록 만듭니다. 🎜>
클래스의 값이 같은지 비교할 때는 equals() 메서드를 사용하고, 두 패키징 클래스의 참조가 동일한 객체를 가리키는지 테스트할 때는 ==를 사용합니다. 이론. .String str1 = "abc"; String str2 = "abc"; System.out.println(str1==str2); //true
String str1 =new String ("abc"); String str2 =new String ("abc"); System.out.println(str1==str2); // false