ホームページ  >  記事  >  ウェブフロントエンド  >  JavaのString型変数の代入入門_基礎知識

JavaのString型変数の代入入門_基礎知識

WBOY
WBOYオリジナル
2016-05-16 15:08:181749ブラウズ

次のコードを実行します。結果はどうなりますか?

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"; があるとすると、2 番目のステートメントは元のストレージ アドレス "aa" の内容を変更せず、別のアドレスを開きます。スペース。同時に「bb」を格納するために使用されます。str が元々指していた「aa」は現在アクセスできないため、jvm はそれを GC を通じて自動的にリサイクルします。

メソッドを呼び出すとき、String 型と配列は参照によって渡されます。上記のコードでは、str がパラメータとして change(String str, char ch[]) メソッドに渡されます。メソッド パラメータ str は、指す文字列を指します。ただし、 str = "test ok"; ステートメントにより、メソッド パラメータ str は、「test ok」を格納する新しく割り当てられたアドレスを指しますが、元の str は引き続き「good」を指します。配列の場合、change メソッドのメソッド パラメーター 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 での String 型変数の割り当てに関する上記の紹介は、エディターによって共有されたすべての内容です。参考にしていただければ幸いです。また、Script Home をサポートしていただければ幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。