String s String s=null和String s="a"區別

來源:互聯網
上載者:User

標籤:寫入   對象   main   print   賦值   new   顯示   輸出   連結   

原文連結:https://www.cnblogs.com/ipetergo/p/6826909.html
String s;和String s=null;和String s="a";有什麼區別?  

針對這三種情況,使用out.println(s);的時候,第一個會出現異常,第二個會輸出null.第三個則會輸出a.  
 這是為什麼呢?這三句聲明語句,各自作了什麼呢? 

答:
第一個只是定義了一個String類型變數s,並沒有給它賦初值,在Java中,預設在使用一個變數的時候必須賦予它初值(降低風險)。 第二個和第三個都定義了String類型變數s,並賦予它初值,只不過第二個賦予的值為null(空)罷了

主要要理解的是String s; s為一個引用~~它不是對象   第一個是沒有初始化的引用;   第二個為空白引用;
第三個是在字串池裡寫入一個字元‘a‘,然後用s指向它。
另外,   String s="a"和String s=new String("a");是有本質上的區別的   前者是在字串池裡寫入一個字元‘a‘,然後用s指向它;
後者是在堆上建立一個內容為"a"的字串對象。
String str="aaa"; //於棧上分配記憶體
String str=new String("aaa"); //於堆上分配記憶體

String s; 系統會自動賦值null

String s;只是給s分配一個記憶體空間   String s=null;是分配的空間中儲存的值為空白值   String s="a";這句就不用我多說了分配的空間的值為字元a


延伸補充:
在成員變數的定義中,String s;等同於String s=null;
而在本地變數(方法變數)的定義中,String s;不等同於String s=null;,這時要使用s必須顯式地賦值。
這些雖然是小知識點,但在實際應用中很重要,也很容易被一些人忽視,特此提出。
還有一點要說明的是:
只要是在方法在中定義變數都要顯示賦初值,main()方法也不例外,而在方法之外編譯器回自動賦初值。

String s String s=null和String s="a"區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.