Java java지도 시간 Java String의 일부 소스 코드 해석을 공유합니다.

Java String의 일부 소스 코드 해석을 공유합니다.

May 22, 2017 am 11:06 AM

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 생성 시간을 두 배로 절약하고 분명히 훨씬 더 효율적입니다.

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 클래스 예제 튜토리얼 공유

위 내용은 Java String의 일부 소스 코드 해석을 공유합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

자바의 완전수 자바의 완전수 Aug 30, 2024 pm 04:28 PM

Java의 완전수 가이드. 여기서는 정의, Java에서 완전 숫자를 확인하는 방법, 코드 구현 예제에 대해 논의합니다.

Java의 난수 생성기 Java의 난수 생성기 Aug 30, 2024 pm 04:27 PM

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

자바의 웨카 자바의 웨카 Aug 30, 2024 pm 04:28 PM

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

Java의 스미스 번호 Java의 스미스 번호 Aug 30, 2024 pm 04:28 PM

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

Java Spring 인터뷰 질문 Java Spring 인터뷰 질문 Aug 30, 2024 pm 04:29 PM

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

Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Feb 07, 2025 pm 12:09 PM

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

Java의 날짜까지의 타임스탬프 Java의 날짜까지의 타임스탬프 Aug 30, 2024 pm 04:28 PM

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

캡슐의 양을 찾기위한 Java 프로그램 캡슐의 양을 찾기위한 Java 프로그램 Feb 07, 2025 am 11:37 AM

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

See all articles