2017-05-16 6 views
0

以下のプログラムでは、文字列を置き換えて同じ変数に代入しようとしています。しかし、Javaでは、文字列はimmutableです。一度作成されると、それを変更することはできません。しかしここで私は変更することができます。私の理解が正しいかどうかは分かりません。誰でも助けてくれますか?Java不変の文字列

public static void main(String[] args) { 

     String s = "1234504"; 
     s = s.replaceAll("0", ""); 
     int count = 0; 
     for(int i = 0; i< s.length() ; i++){ 
      if(Character.isDigit(s.charAt(0))){ 
       count++; 
      } 
     } 
     System.out.println("Number of digits in string"); 
     System.out.println(count); 

    } 
+2

文字列を変更していない場合は、新しい文字列に置き換えます。 – Kayaman

+0

質問には関係しませんが、リテラルを置き換えるので、正規表現をサポートする 'replaceAll'を呼び出す必要はありません。リテラルに+ *^$などの正規表現メタキャラクタが含まれていると問題に直面しないように安全ですから、代わりに 'replace'を呼び出すほうがよいでしょう。両方のメソッドは、string内の検索された部分のすべての置換を置き換えます。これらのメソッドの違いは、正規表現のサポートだけです。 – Pshemo

答えて

0

s = s.replaceAll("0", "");Stringを変異させていない、それは新しいStringを作成し、s変数に割り当てます。 sによって参照された元のStringは変更されません。

+0

文字列の突然変異の例を教えてください。 – Aishu

+0

@Aishuいいえ。文字列を変更することはできません。 – Eran

+0

最終的なrtとして定義されている文字列を変更することはできません...これは文字列を変更することができない例です。私は正しい? – Aishu