Java 문자열 부분 소스 코드 해석에 대한 기사를 살펴보고 편집기로 살펴보겠습니다.
문자열 유형의 멤버 변수
/** String的属性值 */ private final char value[]; /** The offset is the first index of the storage that is used. */ /**数组被使用的开始位置**/ private final int offset; /** The count is the number of characters in the String. */ /**String中元素的个数**/ private final int count; /** Cache the hash code for the string */ /**String类型的hash值**/ private int hash; // Default to 0 /** use serialVersionUID from JDK 1.0.2 for interoperability */ private static final long serialVersionUID = -6849794470754667710L;
위의 멤버 변수를 통해 String 클래스의 값은 최종적이며 변경할 수 없음을 알 수 있으므로 값이 변경되는 한 새로운 String 유형의 객체가 생성되고 String 데이터는 변경되지 않습니다. 반드시 배열 요소의 0번째 위치부터 시작할 필요는 없지만 오프셋이 가리키는 요소부터 시작합니다.
다음 코드는 새 개체를 생성하고 최종 결과는 새 값 "bbaa"를 포함하는 새 문자열 값입니다.
String a = new String("bb"); String b = new String("aa"); String c = a + b;
문자열 유형 객체의 길이는 불변이라고 할 수도 있습니다. 문자열 접합 문자열은 매번 새로운 객체를 생성하므로 문자열 접합 효율성은 확실히 가변 길이 StringBuffer 및 StringBuilder만큼 빠르지는 않습니다. .
그러나 다음 상황에서는 두 문자열이 빠르게 연결됩니다.
String a = "aa" + "bb";
이유는 다음과 같습니다. Java는 문자열 연결을 위해 약간의 최적화를 수행했습니다. "aa"와 "bb". "aabb"에 직접 연결되고 값이 a에 할당됩니다. String 객체는 한 번만 생성하면 되며, 이는 위 방법에 비해 String 생성 시간을 두 배로 절약하고 분명히 훨씬 더 효율적입니다.
일반적인구성 방법을 살펴보겠습니다. 1. 매개변수 없는 구성 방법:
public String() { this.offset = 0; this.count = 0; this.value = new char[0]; }
2. 문자열 유형 객체
public String(String original) { int size = original.count; char[] originalValue = original.value; char[] v; if (originalValue.length > size) { // The array representing the String is bigger than the new // String itself. Perhaps this constructor is being called // in order to trim the baggage, so make a copy of the array. int off = original.offset; v = Arrays.copyOfRange(originalValue, off, off+size); } else { // The array representing the String is the same // size as the String, so no point in making a copy. v = originalValue; } this.offset = 0; this.count = size; this.value = v; }
의 생성자를 전달합니다. 3. 문자 배열
public String(char value[]) { int size = value.length; this.offset = 0; this.count = size; this.value = Arrays.copyOf(value, size); }
의 생성자를 전달합니다. 4. 문자열 번호와 시작 요소인 생성자를 전달합니다. 요소 수
public String(char value[], int offset, int count) { if (offset < 0) { throw new StringIndexOutOfBoundsException(offset); } if (count < 0) { throw new StringIndexOutOfBoundsException(count); } // Note: offset or count might be near -1>>>1. if (offset > value.length - count) { throw new StringIndexOutOfBoundsException(offset + count); } this.offset = 0; this.count = count; this.value = Arrays.copyOfRange(value, offset, offset+count); }
위의 공통 생성자에서 String 객체를 생성할 때 객체의 세 가지 속성인 offset, count 및 value에 값을 할당해야 함을 알 수 있습니다. 그러면 완성된 String 유형을 얻을 수 있습니다.
공용 함수:
1. 두 문자열이 같은지 확인하는 함수(Equal): 실제로는 비교 인스턴스가 문자열 유형인지 먼저 확인하는 것입니다. data, not 그런 다음 False를 반환합니다. 그렇다면 각 문자 요소를 비교하여 동일한지 확인합니다. 동일하면 True를 반환하고, 그렇지 않으면 False를 반환합니다.
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) { char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; while (n-- != 0) { if (v1[i++] != v2[j++]) return false; } return true; } } return false; }
2. 크기를 비교하는 함수 of two strings(compareTo ): 입력은 두 개의 문자열입니다. 반환된 0은 두 문자열의 값이 동일하다는 의미입니다. 반환이 0보다 작으면 첫 번째 문자열의 값이 값보다 작습니다. 두 번째 문자열의 값입니다. 0보다 크면 첫 번째 문자열의 값이 두 번째 문자열의 값보다 크다는 의미입니다.
비교 과정은 주로 다음과 같습니다. 두 문자열의 첫 번째 요소부터 시작하여 실제 비교는 두 문자의 ACII 코드입니다. 다른 값이 추가되면 첫 번째 다른 값이 됩니다. 차이가 있으면 0을 반환합니다.
public int compareTo(String anotherString) { int len1 = count; int len2 = anotherString.count; int n = Math.min(len1, len2); char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; if (i == j) { int k = i; int lim = n + i; while (k < lim) { char c1 = v1[k]; char c2 = v2[k]; if (c1 != c2) { return c1 - c2; } k++; } } else { while (n-- != 0) { char c1 = v1[i++]; char c2 = v2[j++]; if (c1 != c2) { return c1 - c2; } } } return len1 - len2; }
코드 보기
3. 문자열이 접두사 문자열로 시작하는지 확인합니다. toffset은 길이가 같습니다
public boolean startsWith(String prefix, int toffset) { char ta[] = value; int to = offset + toffset; char pa[] = prefix.value; int po = prefix.offset; int pc = prefix.count; // Note: toffset might be near -1>>>1. if ((toffset < 0) || (toffset > count - pc)) { return false; } while (--pc >= 0) { if (ta[to++] != pa[po++]) { return false; } } return true; } public int hashCode() { int h = hash; if (h == 0) { int off = offset; char val[] = value; int len = count; for (int i = 0; i < len; i++) { h = 31*h + val[off++]; } hash = h; } return h; }
4. 두 문자열 연결(concat)
public String concat(String str) { int otherLen = str.length(); if (otherLen == 0) { return this; } char buf[] = new char[count + otherLen]; getChars(0, count, buf, 0); str.getChars(0, otherLen, buf, count); return new String(0, count + otherLen, buf); }
문자열을 연결하는 여러 가지 방법
1. 가장 직접적인 방법은 +를 사용하여 직접 연결하는 것입니다.
String a = new String("bb"); String b = new String("aa"); String c = a + b;
2. concat(String) 메서드
String a = new String("bb"); String b = new String("aa"); String d = a.concat(b);
3. StringBuilder 사용
String a = new String("bb"); String b = new String("aa"); StringBuffer buffer = new StringBuffer().append(a).append(b);
첫 번째와 두 번째 방법이 더 자주 사용되지만 효율성은 상대적으로 낮습니다.
【관련 추천】
1. 자바에서는 문자열이 객체인가요, 클래스인가요? Java의 String에 대한 자세한 설명
2. Java의 String 클래스 예제 튜토리얼 요약
3. Java의 문자열 클래스? Java의 String 클래스의 일반적인 메소드 요약
4.위 내용은 Java String의 일부 소스 코드 해석을 공유합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

Dreamweaver Mac版
시각적 웹 개발 도구

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

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기
