Java java지도 시간 String, StringBuffer, StringBuilder의 차이점과 Java의 스택 메모리 할당에 대한 그래픽 소개

String, StringBuffer, StringBuilder의 차이점과 Java의 스택 메모리 할당에 대한 그래픽 소개

Mar 04, 2017 am 09:33 AM

Java의 String 클래스는 매우 일반적으로 사용되는 클래스이지만 세부 사항에 대한 관심이 가장 적기 때문에 대부분의 인터뷰에서는 이 클래스에 중점을 둡니다. 예를 들어 String str = new String("hello"); 는 여러 메모리 공간, String과 StringBuffer의 차이점 등을 엽니다. 제가 이해한 바는 다음과 같습니다.

String은 final로 수정된 클래스이므로 상속될 수 없습니다. StringBuffer도 final에 의해 수정된 클래스입니다.

1. JVM 메모리 분할

Java에는 주로 4가지 메모리 공간이 있습니다. 스택 메모리 공간, 힙 메모리 공간, 글로벌 데이터 영역, 글로벌 코드 영역

1. 스택 메모리 공간 : 모든 객체 이름 저장 (참조되는 힙 메모리 공간의 주소가 저장됨)

2. 힙 메모리 공간 : 각 객체의 특정 내용 저장

3. 글로벌 데이터 영역: 정적 타입 데이터 속성 저장(글로벌 데이터)

4. 글로벌 코드 영역: 모든 메소드 정의 저장


JVM에서 힙 메모리는 객체 인스턴스화의 내용(프로그램 데이터)을 저장하는 메모리 공간으로, 객체의 이름을 저장하고 그 내용은 해당 힙의 주소를 가리킨다.


2. Sring의 메모리 할당


String에는 특별한 기능이 있습니다. String 객체를 생성할 때 new 생성 또는 "hello"를 사용하여 직접 생성할 수 있습니다. 두 가지 방법 중 두 번째 방법을 사용하는 것이 좋습니다.

1. String a = "hello";


2. String a= new String("hello");

설명은 다음과 같습니다. 🎜>

1: 객체 참조는 스택 메모리에 정의되어 힙 메모리에 있는 "hello" 값의 메모리 주소를 가리킵니다. 드디어 추억의 공간이 열렸습니다

2: a의 객체 참조가 스택 메모리에서 재정의됩니다. 먼저 "hello" 값으로 힙 메모리의 메모리 주소를 가리킨 다음 "hello" 값으로 힙 메모리의 주소를 가리킵니다. "새로운 후. 결국 두 개의 공간이 열렸습니다. 첫 번째 공간에는 객체 참조가 없으며 JVM에 의해 가비지 수집됩니다.

도표는 다음과 같습니다.

🎜>

  • 그 중 a==b==d와 c=e만 있습니다.


설명:
1. String은 새로운 메모리가 나올 때마다 힙 메모리를 기다리기를 원하지 않으며 d는 그렇지 않습니다. new가 새 주소를 할당한 후 기다리고 싶고 new 이후의 주소를 버리고 a에 해당하는 메모리 주소를 가리키고 있으므로 동일합니다.

2. "hello" 할당의 직접 할당 방식이 가리키는 힙 메모리 공간은 동일합니다. String은 Java에서 공유 설계를 사용하며, 이 개체 풀은 여러 개체를 저장할 수 있습니다. 새로 인스턴스화된 개체가 개체 풀에 이미 있으면 개체 풀에서 직접 반복적으로 정의하고 사용하지 않습니다. . 따라서 기존 콘텐츠에

을 사용하면 개체는 인스턴스의 공간 주소를 가리킵니다.

3. e는 C의 메모리 공간을 직접 가리킨다.

4. 따라서 String을 사용할 때에는 메모리 공간을 줄이고 성능을 향상시키기 위해 직접 할당을 사용하는 것이 좋습니다.


3. String, StringBuffer, StringBuilder의 차이점

1. String, StringBuffer, StringBuilder는 모두 final로 수정되며 상속 및 재작성이 불가능합니다. 의.

2. String이 인스턴스화되면 메모리 공간의 콘텐츠 크기를 수정할 수 없습니다. StringBuffer는 인스턴스화 후 힙 메모리에서 동적으로 수정될 수 있는 스레드로부터 안전한 변수 문자 시퀀스입니다. 길이와 크기는 가변적입니다. StringBuilder가 인스턴스화되면 메모리 크기와 길이도 가변적입니다.

차이점은 StringBuilder는 스레드 동기화되지 않으므로 해당 작업이 StringBuffer보다 효율적이어야 한다는 것입니다.

일부 사람들은 다음과 같이 생각할 것입니다.

        String str = "hello"; > str 값도 변경되지 않았나요?

실제로 위 코드는 메모리에 "hello", "andy", "helloandy"라는 3개의 공간을 열었습니다. 해당 힙 메모리 크기는 고정되어 있으며 마지막으로 str은 "helloandy"를 가리킵니다. 힙 주소. 아래 그림과 같이

및 StringBuffer는 메모리 공간만 열므로 APPEND를 사용하여 삭제와 같은 작업 내용을 추가할 수 있습니다.

String 객체가 생성될 때마다 시스템 성능에 영향을 미치게 됩니다. 특히 메모리에 참조되지 않은 객체가 너무 많으면 JVM의 GC가 작동하기 시작하며 속도는 확실히 상당히 빨라질 것입니다. 느린. 그러나 StringBuffer/StringBuilder 클래스를 사용하면 결과가 달라질 수 있습니다. 매번 결과는 새 개체를 생성한 다음 개체 참조를 변경하는 대신 StringBuffer/StringBuilder 개체 자체에 대한 작업이 됩니다.

따라서 루프에 문자열을 할당할 때는 메모리를 절약하고 성능을 향상시킬 수 있는 StringBuffer(스레드 안전) 또는 StringBuilder를 사용하는 것이 가장 좋습니다

.


위 내용은 Java의 String, StringBuffer, StringBuilder의 차이점과 스택 메모리 할당으로 소개된 내용의 차이입니다. 자세한 내용은 PHP 중국어(www.php.cn)를 참고하세요. !


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Jul 24, 2023 pm 07:55 PM

Java의 String.valueOf() 함수를 사용하여 기본 데이터 유형을 문자열로 변환 Java 개발에서 기본 데이터 유형을 문자열로 변환해야 할 때 일반적인 방법은 String 클래스의 valueOf() 함수를 사용하는 것입니다. 이 함수는 기본 데이터 유형의 매개변수를 허용하고 해당 문자열 표현을 반환할 수 있습니다. 이 기사에서는 기본 데이터 유형 변환을 위해 String.valueOf() 함수를 사용하는 방법을 살펴보고 다음과 같은 몇 가지 코드 예제를 제공합니다.

char 배열을 문자열로 변환하는 방법 char 배열을 문자열로 변환하는 방법 Jun 09, 2023 am 10:04 AM

char 배열을 문자열로 변환하는 방법: 할당을 통해 달성할 수 있습니다. char 배열이 문자열에 직접 값을 할당하고 실행하도록 하려면 {char a[]=" abc d\0efg ";string s=a;} 구문을 사용합니다. 변환을 완료하는 코드입니다.

StringBuilder를 지우는 방법은 무엇입니까? StringBuilder를 지우는 방법은 무엇입니까? Oct 12, 2023 pm 04:57 PM

stringbuilder를 지우는 방법은 다음과 같습니다. 1. setLength(0) 메서드를 사용하여 StringBuilder 개체를 지웁니다. 2. delete(0, length) 메서드를 사용하여 StringBuilder 개체를 지웁니다. 3. 교체(0, length, ")를 사용합니다. ") 메서드를 사용하여 StringBuilder 개체를 지웁니다. 4. , new StringBuilder()를 사용하여 새 StringBuilder 개체를 다시 만듭니다.

Java에서 StringBuilder 클래스의 delete() 메서드를 사용하여 문자열 내용의 일부를 삭제합니다. Java에서 StringBuilder 클래스의 delete() 메서드를 사용하여 문자열 내용의 일부를 삭제합니다. Jul 26, 2023 pm 08:43 PM

문자열 내용의 일부를 삭제하려면 Java에서 StringBuilder 클래스의 delete() 메서드를 사용합니다. String 클래스는 Java에서 일반적으로 사용되는 문자열 처리 클래스입니다. 그러나 어떤 경우에는 문자열을 자주 수정해야 하며 String 클래스의 불변성으로 인해 새 문자열 개체가 자주 생성되어 성능에 영향을 미칩니다. 이 문제를 해결하기 위해 Java는 StringBuilder 클래스를 제공합니다.

문자열을 Java의 StringBuilder로 변환 문자열을 Java의 StringBuilder로 변환 Sep 02, 2023 pm 03:57 PM

StringBuilder 클래스의append() 메소드는 String 값을 받아 현재 객체에 추가합니다. 문자열 값을 StringBuilder 개체로 변환 - 문자열 값을 가져옵니다. stringBuilder에 문자열을 가져오려면 Append() 메서드를 사용하여 추가하세요. 예제 다음 Java 프로그램에서는 문자열 배열을 단일 StringBuilder 개체로 변환합니다. 실시간 데모 publicclassStringToStringBuilder{ publicstaticvoidmain(Stringargs[]){&a

Java의 String.replace() 함수를 사용하여 문자열의 문자(문자열)를 바꿉니다. Java의 String.replace() 함수를 사용하여 문자열의 문자(문자열)를 바꿉니다. Jul 25, 2023 pm 05:16 PM

Java의 String.replace() 함수를 사용하여 문자열의 문자(문자열) 바꾸기 Java에서 문자열은 불변 객체입니다. 즉, 문자열 객체가 생성되면 해당 값을 수정할 수 없습니다. 그러나 문자열에서 특정 문자나 문자열을 바꿔야 하는 상황이 발생할 수 있습니다. 이때 Java의 String 클래스에 있는 replacement() 메소드를 사용하여 문자열 교체를 구현할 수 있습니다. String 클래스의 replacement() 메소드에는 두 가지 유형이 있습니다.

Java 문서 해석: StringBuilder 클래스의 substring() 메서드에 대한 자세한 소개 Java 문서 해석: StringBuilder 클래스의 substring() 메서드에 대한 자세한 소개 Nov 03, 2023 pm 04:31 PM

Java 문서 해석: StringBuilder 클래스의 substring() 메소드에 대한 자세한 소개 소개: Java 프로그래밍에서 문자열 처리는 가장 일반적인 작업 중 하나입니다. Java는 문자열 처리를 위한 일련의 클래스와 메서드를 제공하며, 그중 StringBuilder 클래스는 자주 사용되는 문자열 작업에 일반적으로 사용됩니다. StringBuilder 클래스에서 substring() 메서드는 문자열의 하위 문자열을 가로채는 데 매우 유용한 메서드입니다. 이 기사는

2w 단어 자세한 설명 문자열, yyds 2w 단어 자세한 설명 문자열, yyds Aug 24, 2023 pm 03:56 PM

안녕하세요 여러분, 오늘은 Java: String에 대한 기본 지식을 여러분과 공유하겠습니다. String 클래스의 중요성은 말할 필요도 없이 우리 백엔드 개발에서 가장 많이 사용되는 클래스라고 할 수 있으므로 이에 대해 이야기할 필요가 있다.

See all articles