String s;和String s=null;和String s="a";有什么區別?


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()方法也不例外,而在方法之外編譯器回自動賦初值。
 


免責聲明!

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



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