Java関数内の文字列値の変更 質問する

Java関数内の文字列値の変更 質問する

非常に厄介な質問なのですが...

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

おすすめ記事