非常に厄介な質問なのですが...
void changeString(String str){
str = "Hello world":
}
main(){
String myStr = new String("");
changeString(myStr);
}
が戻るとmain
、値は のままで""
ではありません"Hello world"
。なぜでしょうか?
また、これをどのように動作させるのでしょうか? 関数でchangeString
取得した文字列を「Hello world」に変更するとします。
ベストアンサー1
誰もがなぜ機能しないのかを説明しましたが、どうすれば機能するのかを説明する人はいませんでした。最も簡単な方法は、次のものを使用することです。
String changeString() {
return "Hello world";
}
main() {
String myStr = new String("");
myStr = changeString();
}
ただし、このメソッド名はここでは不適切です。元のアイデアを使用する場合は、次のようなものが必要になります。
void changeString(ChangeableString str) {
str.changeTo("Hello world");
}
main() {
ChangeableString myStr = new ChangeableString("");
changeString(myStr);
}
クラスはChangeableString
次のようになります:
class ChangeableString {
String str;
public ChangeableString(String str) {
this.str = str;
}
public void changeTo(String newStr) {
str = newStr;
}
public String toString() {
return str;
}
}
参照に関する簡単なレッスン:
Java メソッドでは、すべてが値で渡されます。これには参照も含まれます。これは、次の 2 つの異なる方法で説明できます。
void doNothing(Thing obj) {
obj = new Something();
}
void doSomething(Thing obj) {
obj.changeMe();
}
doNothing(obj)
からmain()
(またはどこからでも)呼び出した場合、obj
呼び出し先では変更されません。doNothing
新しいものを作成しThing
、その新しい参照をobj
方法の範囲内で。
一方、 では をdoSomething
呼び出しており、値渡しされた をobj.changeMe()
逆参照して変更します。obj