>  기사  >  웹 프론트엔드  >  Java_Basic 지식에서 String형 변수 할당 소개

Java_Basic 지식에서 String형 변수 할당 소개

WBOY
WBOY원래의
2016-05-16 15:08:181801검색

다음 코드를 실행해 보세요. 결과는 무엇인가요?

package com.test;

public class Example {
  
  String str = new String("good");
  char[] ch = { 'a', 'b', 'c' };

  public static void main(String[] args) {
    Example ex = new Example();
    ex.change(ex.str, ex.ch);
    System.out.println(ex.str);
    System.out.println(ex.ch);
  }

  public void change(String str, char ch[]) {
    str = "test ok";
    ch[0] = 'g';
  }
  
}

결과는 다음과 같습니다.

good
gbc

해설:

Java의 문자열은 불변입니다. 즉, 일단 초기화되면 해당 참조가 가리키는 내용은 불변입니다(참고: 내용은 불변입니다).

즉, 코드에 String str = "aa"; str = "bb"; 가 있다고 가정하면 두 번째 문은 "aa"의 원래 저장 주소 내용을 변경하지 않고 다른 주소를 엽니다. space. "bb"를 동시에 저장하는 데 사용됩니다. str이 원래 가리킨 "aa"는 이제 도달할 수 없기 때문에 jvm은 GC를 통해 자동으로 재활용합니다.

메소드를 호출할 때 String 유형과 배열은 참조로 전달됩니다. 위 코드에서 str은 매개변수로 변경(String str, char ch[]) 메소드에 전달됩니다. 메소드 매개변수 str은 가리키는 문자열을 가리킵니다. 클래스에서 str을 사용하지만 str = "test ok"; 문은 메서드 매개 변수 str이 "test ok"를 저장하는 새로 할당된 주소를 가리키도록 만드는 반면 원래 str은 여전히 ​​"good"을 가리킵니다. 배열의 경우, 변경 메소드에서 메소드 매개변수 ch는 클래스의 ch가 가리키는 배열을 가리키고, ch[0] = 'g' 명령문은

다음 코드를 다시 살펴보겠습니다. 그 연산 결과는 무엇입니까?


package com.test;

public class Example {
  
  String str = new String("good");
  char[] ch = { 'a', 'b', 'c' };

  public static void main(String[] args) {
    Example ex = new Example();
    ex.change(ex.str, ex.ch);
    System.out.println(ex.str);
    System.out.println(ex.ch);
  }

  public void change(String str, char ch[]) {
    str = str.toUpperCase();
    ch = new char[]{ 'm', 'n' };
  }
  
}

결과는 다음과 같습니다.

good
abc
이전 설명으로 봤을 때 이런 결과가 예상되는 걸까요? !

위의 Java에서의 문자열 유형 변수 할당에 대한 소개는 모두 편집기에서 공유한 내용이므로 참고가 되기를 바라며, Script Home을 지원해 주시길 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.