回覆列表
  • 1 # 使用者7004596690954

    String str = "nihao"; 程式開始執行這句程式碼,肯定是要建立一個物件的, 只是這個物件建立後就是一個常量,不可以更改, 並且這個物件是放在串池裡面的,也就是你說的那個常量池

    如果我後面在寫一句程式碼: String other = "nihao";

    str和other這2個引用的地址就是一樣的, 因為str和other的宣告方式是一樣的, 都是在串池, str的物件建立時,串池中沒有"nihao"這個常量,就建立一個. other物件建立時,發現串池中已經有了"nihao"這個常量, 就直接拿過來用就是了

    String a1 = new String("nihao");

    String b1 = new String("nihao");

    但是如果我們透過上面的方式直接new String() 那個a1和b1這2個引用的物件就不是在串池中了,而是在堆中, 但是new String() 的引數"nihao"也是一個字串啊, 這個字串從哪裡來呢?如果我們吧程式碼拆分一下就明白了:

    String para = "nihao";

    String a1 = new String(para);

    就會發現String a1 = new String("nihao"); 這一句程式碼實際上建立了2個物件, 一個是String物件,存放在堆中, 一個是字串常量物件,存放在串池中

  • 中秋節和大豐收的關聯?
  • 寶寶排便困難,該怎麼辦?