String在方法中的傳遞方式(調用外部方法給String變量賦值時,未得到預期結果)


示例:

public class StringTraining {
  public static void changeStr(String str){
    str = "137878";
  }
  public static void main(String[] args){
    String a = "b";
    changeStr(a);
    System.out.println(a);
  }
}

輸出仍舊為b

分析:首先棧中存的是堆中對象的地址,因為String對象的特殊性(String有自己的常量池),當遇到常量池中沒有的字符串時,String會開辟新的內存空間(生成新對象)。實例中,將a的值(“b”的地址)賦值給了str,從而起初示例中a引用指向“b”,str初始值也是指向“b”;然而當給str重新賦值時,str指向了另一個內存空間(即存儲的是新字符串的地址,相當於給str重新賦值了),因此str指向“137878”,對a沒影響。

情景:當調用外部方法改變String的值是無法生效的,比如我想用外部方法進行參數校驗,當某個String類型參數為空或null時,我給這個參數賦一個默認值,這個賦值動作是無效的,因而當用到該參數時,仍舊會報空指針。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM