2017-11-26 4 views
2
public class ReverseString { 
    public static void main(String[] args) { 
     String s = "mnop"; 
     s.charAt(0) = 'l'; 
    } 
} 
+1

文字列はJavaでは不変なので、作成されると、変更されません。代わりに 'StringBuilder'を見てください。 –

答えて

2

Javaの文字列は変更できません。

、このような何かを行うのStringBuilder使用するには:

StringBuilder sb = new StringBuilder("mnop"); 
sb.setCharAt(0, 'l'); 

//later, you probably want to get back to a String: 
String s = sb.toString(); 
+1

はい、文字列は不変ですが、OPが "MutableString'"クラスでもやろうとしていることはできません。 –

1

s.charAt(0)char値ではなく、あなたが値を割り当てることができますするchar変数を返します。

とにかくStringは不変なので、既存のStringの値を変更することはできません。

あなたはStringのすべての文字の配列のコピーを入手し、その配列を変更することができます:それは不変なので

String s = "mnop"; 
char[] chars = s.toCharArray(); 
chars[0]= 'l'; 

しかし、これは、オリジナルのStringを変更しません。

あなたはしかし、その配列を使用して新しいStringを作成することができます。

String newS = new String(chars); 
1

文字列のその位置にある文字のコピーですcharを返しcharAt。それは元の文字列への参照ではなく、不変です。

あなたが代わりにStringBuilderを使用することができ、しかし:

StringBuilder sb = new StringBuilder("mnop"); 
sb.setCharAt(0, 'l'); 
String s = sb.toString(); 
3

Javaは唯一の変数、フィールドおよび配列要素に割り当てることができます。

s.charAt(0)のようなメソッドの結果は、これらのどれもないので、割り当てられません。

理由はJavaが返す方法にあります。これは参照ではなく値によって返します。その値は一時的にしか存在しません。そのように、あなたがそれを割り当てることができたなら、その割り当ての副作用はすぐに失われ、無意味になります。

Stringは変更できません。しかし、あなたが割り当てることができるこの制限は、あなたが作成しようとするかもしれない概念的なMutableStringクラスのためにさえこれを行うことができなかった理由です。

+0

あなたが言っていることに同意しますが、OPが適切なタイプを使用していた場合、彼はsetCharAt()、insert()、および残りのものも見つけた可能性があります..私は彼が 'str.charAt (i)<==> str [i] '他の言語から..とにかく、あなたは+1を得る。 – xs0

関連する問題