Stringに対する深い理解

3892 ワード

まずコードを見てみましょう.
package com.ykp.test;

public class StringTest {
    public static void main(String[] args) {
        String str = "TEST";
        change(str);
        System.out.println(str);
    }

    public static void change(String str) {
        str = str.replace('S', 'E');
        str = str.substring(1);
    }
}

最終出力の結果:TEST面接の时、答えは书きましたが、なぜ出力したのかと闻くと、changeで修正したのとmainで修正したのは対象ではないと言いました.次に、コードが次のように変更されたら、
次のコードを見てください.
package com.ykp.test;

public class StringTest {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public static void main(String[] args) {
        StringTest str = new StringTest();
        str.setName("TEST");
        change(str);
        //  sbsb
        System.out.println(str.name);
    }

    public static void change(StringTest str) {
        //str    StringTest  ,StringTest          ,
        //           new StringTest(),     str main      
        str.setName("sbsb");
    }

}

私の説明では、changeで修正したものとmainでは同じオブジェクトではないので、「TEST」を出力するのではないでしょうか.私の解釈が間違っていることがわかります.
正しい解釈は次のとおりです.
public static void main(String[] args) {
    //str      ,        
    String str = "TEST";
    change(str);
    //                   
    System.out.println(str);
}

public static void change(String str) {
    //           ,str       main    
    //replace                str,   str               
    str = str.replace('S', 'E');
    //substring          string  
    str = str.substring(1);
}