programing

Java에서의 CharSequence VS 문자열?

copyandpastes 2022. 7. 8. 00:18
반응형

Java에서의 CharSequence VS 문자열?

안드로이드에서 프로그래밍은, 텍스트 값의 대부분 Android에서에 프로그래밍할 때 대부분의 텍스트 값은 다음과 같습니다 것으로 예상된다.CharSequence.

왜 그런 것일까요?왜 그런 것일까요?는 무엇인가 혜택이며, 주요 이점과 영향은 무엇입니까를 사용한 점이 주요 영향?CharSequence에 걸쳐서에String

주요 차이점은 무엇이며, 사용 중 및 변환 시 예상되는 문제는 무엇입니까?

문자열은 CharSequences이므로 문자열만 사용하면 됩니다.Android는 StringBuffers와 같은 CharSequence 오브젝트를 지정할 수 있도록 하는 것만으로 도움이 됩니다.

CharSequence)인터페이스)인터페이스
String)구체적인 implementation= 구체적인 시행

당신이 말했다:

한쪽에서 다른 쪽으로의 전환

없로부터의변환은 없습니다에서 바꾸고 있습니다.String

  • 모든 모든String오브젝트는CharSequence.
  • 모든 모든CharSequence한 을 만들어 낼 수를 생산할 수 있있다String전화 주세요.CharSequence꿈은공교롭게도 말이다 발생String메서드는 자신의 오브젝트에 대한 참조를 반환합니다.

말하면,,String는 입니다.CharSequence 다 건 아니에요.CharSequence는 입니다.String.

인터페이스 프로그래밍

Android에서 프로그래밍하는 경우 대부분의 텍스트 값은 CharSequence에서 예상됩니다.

왜 그런 것일까요?CharSequence를 String보다 사용할 경우의 이점과 주요 영향은 무엇입니까?

일반적으로 인터페이스에 프로그래밍하는 것이 구체적인 클래스에 프로그래밍하는 것보다 좋습니다.이것에 의해 유연성이 향상되기 때문에, 다른 코드를 파괴하지 않고, 특정의 인터페이스의 구체적인 실장을 전환할 수 있습니다.

다양한 상황에서 다양한 프로그래머가 사용할 API를 개발할 때 가능한 한 일반적인 인터페이스를 주고받을 수 있도록 코드를 작성하십시오.이것에 의해, 콜 프로그래머는, 그 인터페이스의 다양한 실장을 자유롭게 사용할 수 있게 됩니다.특정 컨텍스트에 최적인 실장은 어느 쪽인가입니다.

예를 들어 Java Collections Framework를 참조하십시오.API가 오브젝트의 순서 있는 컬렉션을 주고받는 경우 메서드를 사용한다고 선언합니다.ListArrayList,LinkedList List

여러 장소에서 사용하는 API를 작성하는 것이 아니라 코드만으로 사용하는 빠르고 더러운 작은 메서드를 특정 장소에 작성할 때 특정 클래스가 아닌 보다 일반적인 인터페이스를 사용할 필요가 없습니다.하지만 그래도 가능한 한 일반적인 인터페이스를 사용하는 것은 해가 됩니다.

주요 차이점은 무엇이며, 그것들을 사용하는 동안 예상되는 문제는 무엇입니까?

  • String당신은 하나의 텍스트가 완전히 기억 속에 있고, 불변이라는 것을 알고 있다.
  • CharSequence구체적인 실장 기능에 대해서는 알 수 없습니다.

CharSequence개체는 텍스트의 거대한 청크를 나타낼 수 있으므로 메모리에 영향을 미칠 수 있습니다., 되는 다수의 텍스트 가 있을 수 청크는, 「」를 연결되어야 .toString이치노구현에서는 리모트서비스에서 텍스트를 취득하고 있을 가능성이 있기 때문에 지연이 발생할 수 있습니다.

한 곳에서 다른 곳으로 변환하는 것인가요?

일반적으로 앞뒤로 전환하지 않습니다. a.String 는 입니다.CharSequence a a a a a a a a a a a a a가 하다고 선언한 CharSequence는, 「」를 건네줄 수 String 수 .StringBuffer ★★★★★★★★★★★★★★★★★」StringBuilder된 모든 하여 .를합니다.CharSequence★★★★★★★★★★★★★★★★★★.

에 가장 입니다.CharSequence은 '그것'이 하다는 것을 있다.String은 에 하고 있을 입니다.Stringclass class to to to to to to to to to to to to CharSequence인터페이스입니다.또는 반복 루프 또는 분석과 같은 텍스트에 집중적으로 코드를 사용할 수도 있습니다.1회만 을 합니다.toString 것을 저장하여 을 진행하십시오.그런 다음 하나의 텍스트로 알고 있는 것을 사용하여 작업을 계속 진행합니다.

뒤틀린 역사

승인된 답변에 대한 코멘트를 적어 둡니다.CharSequence가 기존 에 몇 예: "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예"equals()&hashCode()클래스/인터페이스에 태그가 붙은 Java(1, 2, 4, 5)의 다양한 버전에 주의해 주십시오.이치노으로는, 「」입니다.CharSequence처음부터 제 자리에 있었겠지만 그게 인생이에요.

아래 클래스 다이어그램은 Java 7/8에서 문자열 유형의 전체 그림을 보는 데 도움이 될 수 있습니다.이 모든 것이 Android에 탑재되어 있는지는 모르겠지만, 전체적인 콘텍스트는 여전히 도움이 될 수 있습니다.

다양한 문자열 관련 클래스 및 인터페이스 다이어그램

Char Sequence는 Char Sequence입니다."String" CharSequence" CharSequence" "CharSequence" String" "CharSequence" "String" "CharSequence" "String" "CharSequence" "String" "CharSequence" 입니다.Android 는 alsoEditText.getText()할 수 String.method CharSequence에는 들어가지 않는 Editable을 합니다.Char Sequence 。

일반적으로 인터페이스를 사용하면 최소한의 부수적 손상으로 구현을 변경할 수 있습니다.java.lang이지만.문자열은 매우 인기가 있습니다.특정 컨텍스트에서는 다른 구현을 사용할 수 있습니다.API를 Strings가 아닌 CharSequences 중심으로 구축함으로써 코드를 통해 이를 수행할 수 있는 기회가 제공됩니다.

실용적인 Android 코드에서 발생하는 문제 중 하나는 CharSequence.equals와 비교하는 것은 유효하지만 반드시 의도한 대로 동작하지는 않는다는 것입니다.

EditText t = (EditText )getView(R.id.myEditText); // Contains "OK"
Boolean isFalse = t.getText().equals("OK"); // will always return false.

비교 대상자는 다음과 같습니다.

("OK").contentEquals(t.GetText()); 

이는 거의 확실히 퍼포먼스상의 이유일 것입니다.예를 들어 문자열을 포함하는 500k바이트 버퍼를 통과하는 파서를 가정해 보겠습니다.

문자열 내용을 반환하는 방법에는 다음 3가지가 있습니다.

  1. 구문 분석 시 문자열 []을(를) 한 번에 1자씩 작성합니다.이 작업은 상당한 시간이 걸립니다.캐시된 참조를 비교할 때 .devel 대신 ==를 사용할 수 있습니다.

  2. 해석 시 오프셋을 사용하여 int[]를 빌드하고 get()이 발생하면 String을 동적으로 빌드합니다.각 문자열은 새 개체가 되므로 반환된 값을 캐싱하지 않고 ==를 사용합니다.

  3. 해석 시 CharSequence [ ]를 빌드합니다.바이트 버퍼로의 오프셋을 제외하고 새로운 데이터가 저장되지 않기 때문에 해석은 #1보다 훨씬 낮습니다.취득 시에는 String을 작성할 필요가 없기 때문에 퍼포먼스는 #1(#2보다 훨씬 우수)과 같습니다.기존 오브젝트에 대한 참조만 반환하기 때문입니다.

CharSequence를 사용하면 프로세싱이 향상될 뿐만 아니라 데이터를 복제하지 않음으로써 메모리 공간도 줄일 수 있습니다.예를 들어, 3개의 문단을 포함하는 버퍼가 있고 3개의 문단을 모두 반환하거나 1개의 문단을 반환하려면 4개의 문자열이 필요합니다.CharSequence를 사용하면 데이터에 대한 버퍼가 1개뿐이고 시작과 길이를 추적하는 CharSequence 구현 인스턴스가 4개만 필요합니다.

Char Sequence(문자열)

A는 인터페이스이며 실제 클래스가 아닙니다.인터페이스는 클래스가 인터페이스를 실장하는 경우에 포함할 필요가 있는 규칙(메서드)의 세트입니다.Android a의 경우CharSequence는 다양한 종류의 텍스트 문자열용 우산입니다.을 사용하다

(이것들의 차이에 대해서는, 여기를 참조해 주세요).

「 」가 CharSequence '를 구현하는 중 입니다.CharSequence §:

CharSequence myString = "hello";
CharSequence mySpannableStringBuilder = new SpannableStringBuilder();

type like like like like ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」CharSequence하나의 방법으로 여러 유형을 처리할 수 있습니다. 「」, 「」, 「IOS」를 하는 방식이 있는 .CharSequence매, ,, 는, 는, 는, 는, 저, as, as, as, as, as, as, as, as, as, as, as, as, as ,String ★★★SpannableStringBuilder느느쪽쪽쪽쪽처처처수겁겁겁

public int getLength(CharSequence text) {
    return text.length();
}

스트링

a는 단지 한 종류일 뿐이라고 말할 수 있다.CharSequence 지,와는 와 . . . . .CharSequence이 클래스는 실제 클래스이므로 오브젝트를 만들 수 있습니다.이치노

String myString = new String();

하지만 이렇게는 할 수 없습니다.

CharSequence myCharSequence = new CharSequence(); // error: 'CharSequence is abstract; cannot be instantiated

★★CharSequence 규칙 목록이에요.String을 사용하다

CharSequence myString = new String();

, 어떤 으로든 ,, 떤, 어, 어, 법, 법, 법, that, that, that, that, 를 요구하면CharSequence , , it , ,그 it it it , , , , it 。String

String myString = "hello";
getLength(myString); // OK

// ...

public int getLength(CharSequence text) {
    return text.length();
}

그러나 그 반대는 사실이 아니다. 메서드가 음음음음 a a를 하는 String 변수, 것은 수 .CharSequence는 '이러한', '이러한', '이러한', '이러한'일 수 SpannableString또는 다른 종류의CharSequence.

CharSequence myString = "hello";
getLength(myString); // error

// ...

public int getLength(String text) {
    return text.length();
}

CharSequence는 인터페이스이며, 「」입니다.String구현합니다.를 인스턴스화할 수 있습니다.String 그런 건 할 수 요.CharSequence다른 은 에서 찾을.CharSequenceJava java java java java java java java java java java java java java java.

CharSequence는 문자열을 구현하는 문자 값의 판독 가능한 시퀀스입니다.4가지 방법이 있습니다.

  1. charAt(int 인덱스)
  2. 길이()
  3. 서브시퀀스(int start, int end)
  4. toString()

CharSequence 문서를 참조하십시오.

언급URL : https://stackoverflow.com/questions/1049228/charsequence-vs-string-in-java

반응형