java String 细节思考

public class SendValue{
     public String str= "6" ;
     public static void main(String[] args) {
         SendValue sv= new SendValue();
         sv.change(sv.str);
         System.out.println(sv.str);
     }
     public void change(String str) {
         str= "10" ;
     }

}



对于这道题,第一次也错了,今天记录一下


String 被final 修饰,是不可变


 sv.change(sv.str) 这条语句,实际是把sv.str 的一个副本,放在里面,与SendValue.str 只是数据相同,不是同一个对象



public void change(String str) {
         str= "10" ;
     }

 

 这句话,实际是改变的是刚才传递过来的地址,也就是刚才那个副本,  

 str="10"; 把刚才那个副本数据更新为“10”


参考一下这段代码,可能要更清晰

public class SendValue {

    public static String str = "6";

    public static void main(String[] args) {

        SendValue sv = new SendValue();
        sv.change(sv.str);
        System.out.println(sv.str);
    }

    public void change(String str) {
        str = "10";
        System.out.println(SendValue.str);


    }
}



猜你喜欢

转载自blog.csdn.net/qq_33291307/article/details/80793679