>

내 지식에 따라

변경 가능한 문자열을 변경할 수 있으며 변경할 수없는 문자열은 변경할 수 없습니다.

여기서 String의 값을 다음과 같이 변경하고 싶습니다

String str="Good";
str=str+" Morning";

다른 방법은

StringBuffer str= new StringBuffer("Good");
str.append(" Morning");

두 경우 모두 str 의 값을 변경하려고합니다. . 누구든지 두 경우의 차이점을 말해 줄 수 있고 변경 가능하고 변경 불가능한 객체에 대한 명확한 그림을 제공합니다.

  • 답변 # 1

    사례 1 :

    String str = "Good";
    str = str + " Morning";
    
    

    위 코드에서 3 개의 String 를 만듭니다.  개체.

    <올>

    "양호"문자열 풀에 들어갑니다.

    "아침"문자열 풀에도 들어갑니다.

    "Good Morning"과 "Good"을 연결하여 생성되었습니다. 이 남자는을갑니다.

    참고 :문자열은항상 변경할 수 없습니다.변경 가능한 문자열과 같은 것은 없습니다. 와이즈 비즈  "좋은 아침"을 가리키는reference입니다. 당신은 실제로 str 에서 일하는아니입니다  목적. 당신은 1  별개의 3  개체.

    <시간> 사례 2 :

    String
    
    

    StringBuffer str = new StringBuffer("Good"); str.append(" Morning");  문자 배열을 포함합니다. 그것은 StringBuffer아니다입니다 . 위 코드는 기존 배열에 문자를 추가합니다. 효과적으로, String  변경 가능, StringBuffer  표현이 아니다.

  • 답변 # 2

    String

    불변은 존재하지만, 변하지는 않습니다.

  • 답변 # 3

    자바에서는 모든 문자열이 변하지 않습니다.

    What is difference between mutable and immutable String in java

    를 수정하려고 할 때 실제로하고있는 일은 새로운 것을 만드는 것입니다. 그러나 String 를 사용할 때 실제로 새 컨텐츠를 작성하는 대신 컨텐츠를 수정하고 있습니다.

  • 답변 # 4

    Java StringBuilder 불변입니다.

    첫 번째 예에서는참조String 로 변경합니다. 따라서 다른 두 String 의 값을 할당  결합 : Strings .

    반대로, str + " Morning"  또는 StringBuilder  방법을 통해 수정할 수 있습니다.

  • 답변 # 5

    StringBuffer 라고 말할 때 의 의미에주의해야합니다.

    변수 str ?

    또는 str 가 참조한개체를 의미합니까? ?

    당신의 str 에서  예를 들어 StringBuffer 의 값을 변경하지 않습니다 , 그리고 당신의 str 에서  예를 들어, 당신은 String 의 상태를 변경하지 않습니다  개체.

    차이를 경험하는 가장 유쾌한 방법은 다음과 같습니다.

    String
    
    

    static void change(String in) { in = in + " changed"; } static void change(StringBuffer in) { in.append(" changed"); } public static void main(String[] args) { StringBuffer sb = new StringBuffer("value"); String str = "value"; change(sb); change(str); System.out.println("StringBuffer: "+sb); System.out.println("String: "+str); }

관련 자료

  • 이전 ruby on rails - 액티브 레코드 찾기 결과를 직접 업데이트 할 수없는 이유는 무엇입니까?
  • 다음 java - 프로그래밍 방식으로 Ehcache 37 업데이트 검사기를 비활성화 하시겠습니까?