자바의 String 클래스를 사용하는 방법
1. String 이해
1. JDK의 String
먼저 JDK의 String 클래스 소스 코드를 살펴보면 String 클래스가 많이 구현되어 있음을 알 수 있습니다. 이는 String 클래스를 상속할 수 없음을 의미합니다. 이러한 방식으로 JDK를 사용하는 모든 사람은 동일한 String 클래스를 사용하게 됩니다. 모든 사람이 사용하는 문자열은 상속되지 않습니다. 동일한 버전에서는 서로 다른 두 사람이 동일한 메소드를 사용하고 다른 결과를 표시하므로 코드 개발이 불가능합니다. 상속 및 메소드 재정의는 유연성을 가져올 뿐만 아니라 많은 하위 클래스를 가져옵니다. 일관되지 않은 동작의 문제
String str = " hello word "
String str1 = new String(" hello word ");
char[] data = new char[]{'a', 'b','c'};
String str2 = String.valueOf(10);
10 - > int literal
10.1 --> double literal
true --> boolean literal
" abc " - > 문자열 리터럴
문자열의 리터럴은 실제로 문자열입니다.
String str = “hello word”;
String str2 = str;
이때는 문자열 리터럴이자 문자열 객체입니다. 이때 이해를 돕기 위해 임시로 저장되어 있다고 생각합니다. 그러나 실제로는 메소드 영역에 저장됩니다. 이때 str2 = "Hello"인 경우 " "로 묶인 Hello도 문자열 객체이므로 str의 출력에 영향을 미치지 않습니다. space는 이때 힙에 열려 있으며 str2는 이때 새 객체의 주소 공간을 저장합니다. 이는 str
4에 영향을 미치지 않습니다. 문자열 비교는 동일합니다모든 참조 데이터 유형이 비교됩니다. 동일할 경우에는 equals 메소드를 사용하여 비교합니다. JDK에서 일반적으로 사용되는 클래스는 equals 메소드를 재정의하여 직접 사용할 수 있습니다.
아래 그림은 2개의 참조를 보여줍니다. 이는 문자열의 상수 풀과 관련이 있습니다
아래 그림은 두 개의 객체와 두 개의 주소 공간을 생성합니다. ==를 사용하면 false가 반환됩니다 같음의 비교 크기는 대소문자를 구분합니다
equalsIgnoreCase 메소드는 대소문자 구분 비교가 아닙니다
2. 문자열 상수 풀1. 문자열 상수 풀이란? 문자열 상수 풀은 힙에 객체가 없으면 문자열 객체로 유지됩니다. 문자열 객체를 생성하기 위해 직접 할당 방법을 사용하면 JVM이 참조 내용을 상수 풀에 이미 존재하므로 생성할 필요가 없습니다. 새로운 문자열 객체를 생성하되 기존 객체를 직접 재사용합니다. 이것이 위 그림의 세 참조가 동일한 주소를 가리키는 이유입니다
과 동일한 주소 공간
이때 프로그램은 오른쪽에서 왼쪽으로 실행되는데, 코드 첫 번째 줄의 오른쪽은 문자열 상수인데, 이것도 문자열 객체이므로 먼저 상수 풀에 공백을 하나 열어두고, 그런 다음 새 문자열을 만듭니다. 개체가 저장되고 프로그램이 왼쪽으로 실행됩니다. new 키워드를 만나면 새 개체가 생성되어 힙에 저장됩니다. 그런 다음 str1이 힙의 개체를 가리킵니다. 코드의 두 번째 및 세 번째 줄에서는 상수 풀이 생성된 것으로 확인됩니다. 객체가 존재하면 더 이상 생성되지 않습니다. new 키워드를 만나면 새로운 객체가 생성됩니다. 메모리 맵은 다음과 같습니다. :
2. 수동 풀링 방법
String 클래스에서 제공하는 intern 메서드, 로컬 메서드:
Call 인턴 메서드는 현재 문자열 참조가 가리키는 객체를 문자열 상수 풀에 저장합니다. 두 가지 상황이 있습니다:
1. 객체가 현재 상수 풀에 이미 존재하는 경우 새 객체가 생성되지 않고 상수 풀에 반환됩니다.
2. 객체가 현재 상수 풀에 존재하지 않는 경우 풀에 객체를 추가하고 풀에 들어간 후 주소를 반환합니다.
1. 다음 코드 줄의 출력을 살펴보세요
intern 메서드에는 반환 값이 있으므로 str1은 이때 intern 메서드만 호출하고 반환 값을 받지 않으므로 str1은 여전히 를 가리킵니다. 힙에 있는 객체인 str2는 상수 풀에 있는 객체를 가리키므로 false를 반환합니다.
인턴 메서드 호출의 반환 값을 받는 한 true를 반환합니다. str1이 가리키는 개체가 풀에 수동으로 추가되고 풀에 이미 개체가 있으므로 str1이 개체를 직접 가리키도록 합니다.
2. 다음 코드 줄의 출력을 살펴보세요.
pool에는 아무것도 없으므로 상수 풀로 직접 이동하세요 3. 문자열의 불변성
1. 왜 불변성인가요참고: 소위 문자열의 불변성은 불변성을 의미합니다. 문자열의 참조가 변경될 수 없다는 것은 아닙니다
여기서 불변성은 "hello", "world", "helloworld", "!!!" 및 이어진 를 의미합니다. "helloworld!!!" 이는 이미 생성된 문자열 개체입니다. 일단 이 개체가 선언되면 해당 내용을 수정할 수 없지만 참조는 한 순간에는 helloworld를 가리키고 이제는 변경될 수 있습니다. 안녕 세계에! ! ! , 이것이 모두 가능합니다
문자열은 단지 문자 배열일 뿐입니다 -> char[], 문자열은 실제로 문자 배열에 저장됩니다. 문자열의 내용을 변경할 수 없는 이유는 무엇입니까? 문자열의 소스코드를 보고 알아봅시다.
String 내부의 문자 배열이 캡슐화되어 있음을 알 수 있습니다. 이 문자 배열은 문자열의 내용을 변경하는 것은 물론이고 String 클래스 외부에서 액세스할 수도 없습니다.
String str = " hello ";
2 .How 문자열의 내용을 수정하려면
2. StringBuilder 또는 StringBuffer 클래스를 교체합니다. - - 더 이상 동일한 유형이 아닙니다
a.StringBuilder: 스레드가 안전하지 않고 강력한 성능을 발휘합니다 b .StringBuffer: 스레드 안전, 성능 저하
또한 두 클래스의 사용법은 완전히 동일합니다
문자열을 자주 연결해야 하는 경우 StringBuilder 클래스의 추가 메서드를 사용하세요. 잠시 후 변경되며 곧 hello world가 됩니다
3. StringBuilder 클래스의 구체적인 사용
StringBuilder 클래스와 클래스의 문자열 상호 변환:
1. StringBuilder는 toString 메서드를 호출하여 String 클래스로 변환할 수 있습니다.
2. String 클래스는 StringBuilder의 생성자 또는 추가 메서드를 사용하여 StringBuilder 클래스로 변환할 수 있습니다.
기타 일반적으로 사용되는 방법: a. sb에서 제공하는 문자열 반전 연산, reverse();
b. 지정된 범위의 데이터를 삭제하고(int start, int end) 처음부터 끝까지 모든 내용을 삭제하고 왼쪽에서 닫고 오른쪽에서 엽니다.
c. , 각 데이터 유형): 시작 인덱스 위치부터 삽입을 시작하며, 삽입 시작 인덱스는 start
위 내용은 자바의 String 클래스를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











Java의 난수 생성기 안내. 여기서는 예제를 통해 Java의 함수와 예제를 통해 두 가지 다른 생성기에 대해 설명합니다.

Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

Java는 초보자와 숙련된 개발자 모두가 배울 수 있는 인기 있는 프로그래밍 언어입니다. 이 튜토리얼은 기본 개념부터 시작하여 고급 주제를 통해 진행됩니다. Java Development Kit를 설치한 후 간단한 "Hello, World!" 프로그램을 작성하여 프로그래밍을 연습할 수 있습니다. 코드를 이해한 후 명령 프롬프트를 사용하여 프로그램을 컴파일하고 실행하면 "Hello, World!"가 콘솔에 출력됩니다. Java를 배우면 프로그래밍 여정이 시작되고, 숙달이 깊어짐에 따라 더 복잡한 애플리케이션을 만들 수 있습니다.
