Java中變量的定義、聲明、引用、創建、賦值、初始化的區別


在這里引用一個基礎的面試題:

以下幾種定義變量的方式有什么分別?:

1、  String str;

2、  String str=Null;

3、  String str="";

4、  String str="abc";

5、  String str= new ("abc");

相信有很多工作多年的程序員並不能完全,或者說是准確的講清楚上面這個問題,這些基本的知識並不難,只是在實用主義的大旗下大部分的coder缺少沉淀和思考,以至於在一些基礎知識的掌握還不如畢業生,但畢業生也有自己的困境,書本上的東西畢竟有局限性。還好的是你看到這篇與實用主義對立的隨筆文章會對你有所幫助。

 

● 對“定義”的解釋:

在java語言中變量或常量的基本定義方式為:

類 變量名= new類();

基本數據類型 變量名 = 值;

舉個例子,描述用戶的類User:

public class User {

    private String  name;

    private Integer age;

}

現在定義一個變量名為user的User類的對象:User user = new User();

 

當然我們也可以在基本定義方式上增加修飾符:private、public等,也可以在()傳入構造函數的參數;

這里需要說明的是:Java的數據類型有基本數據類型(數值型、字符型、布爾型)、引用數據類型(類、接口、數組)

其實上面這個基本的變量定義方式包含了4個動作:變量的聲明、引用、創建、初始化。

 

● 對“聲明”的解釋:

變量的聲明方式:User user;聲明的特點是該變量user並沒有引用,系統會給它一個默認的引用:null;

 

● 對“引用”的解釋:

變量名 = 對象;這個=的過程就是引用;

例:User user2 = user;

這引用表示:變量user2引用的對象與user引用的對象為同一個。

 

● 對“創建”的解釋

new 類();這個new的動作即為創建對象;

 

● 對“賦值”的解釋

賦值的概念其實基本同引用,所不同是賦值是針對基本數據類型的叫法,引用是針對引用數據類型來講。

例:int n = 100;

定義一個int 類型的變量 n並賦值為100;

 

● 對“初始化”的解釋

在變量定義時的賦值或引用即為初始化,也可以理解為第一次賦值或引用的過程。

 

通過上面的解釋我們再來回答這個基礎的面試題:

1、  聲明了一個變量名為str的類String的變量;

2、  聲明了一個變量名為str的類String的變量,它的初始化引用為空;

3、  聲明了一個變量名為str的類String的變量,它的初始化引用為一個值是""(空串)的String對象;

4、  聲明了一個變量名為str的類String的變量,它的初始化引用為一個值是"abc"的String對象;

5、  聲明了一個變量名為str的類String的變量,它的初始化引用為一個新創建的值是"abc"的String對象;

 

1和2的區別在於:2如果是在局部變量的情況下會報編譯錯誤:the local variable b may not have been initialized(局部變量沒有被初始化)

2和3的區別在於2的引用是空,也就是在堆(heap)內存中無對應的內存空間,3是指向一個在堆內存中值為“”的一個內存空間;

3和4的區別在於引用對象不同,不同對象對應的內存空間不同;

但是如果:

String a = "", b = "";

String c = "abc"; d = "abc";

這時侯a和b引用的內存地址為同一個,c和d引用的內存地址也為同一個;

這是因為在 =(引用)的過程中,系統會在堆(heap)內存的變量池中查找是否有內存空間存儲對象值為"abc"的內存空間,有則引用這個空間。

5與4的別區在於在通過new關鍵字,系統不會判斷堆(heap)內存是否存在相同對象的內存空間,而是直接新申請內存空間創建一個新的對象。

 

Java架構技術交流QQ群:4187754,歡迎一起學習交流!


免責聲明!

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



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