Java朝花夕拾の基本類型和引用類型 – JAVA編程語言程序開發技術文章

Java中數據類型可分為兩大類:引用類型(reference)和基本類型(primitive)。

1)基本類型

基本類型有8種:boolean、char、byte、short、int、long、float、double。它們都有相應的包裝類,這些包裝類都屬於引用類型,它們依次是:Boolean、Character、Byte、Short、Integer、Long、Float、Double。

2)引用類型

所有Java對象都是通過對象引用(Object References)進行訪問的,類似於C++中的指針,這個引用指向堆heap中的某塊區域,實際的對象存在於heap中。

例如,聲明如下代碼:

int prim = 10;

Integer refer = new Integer(10);

這兩者在內存中的佈局如下圖所示:

 

 

至此,有人可能會想:當這兩種類型作為函數參數傳遞時,到底是值傳遞(value)還是引用傳遞(reference),還是兩種類型各自為政?其實Java中的函數參數都是以值方式傳遞的。見代碼片段:

[java]
import java.awt.Point; 
 
/**
 * Java中參數都以傳值方式傳遞,而不是傳引用方式傳遞
 * @author ASCE1885
 *
 */ 
public class PassByValue { 
     
    public static void modifyPoint(Point pt, int in) { 
        //這裡的pt是入參pt的引用的副本,而不是入參pt的副本,即Java以傳值方式傳遞pt的引用  
        //也就是說,pt和入參pt現在指向的是同一個Point對象,詳見圖示  
        pt.setLocation(5, 5); 
        in = 15; //這裡的in其實是入參in的一個副本,所有的更改都是對in而言,跟入參in無關  
        System.out.println("During modifyPoint " + "pt = " + pt + "and in = " + in); 
    } 
     
    public static void main(String[] args) { 
        Point p = new Point(0,0); 
        int i = 10; 
         
        System.out.println("Before modifyPoint " + "p = " + p + "and i = " + i); 
        modifyPoint(p, i); 
        System.out.println("After modifyPoint " + "p = " + p + "and i = " + i); 
         
    } 
 

上面代碼的輸出是:

 

 摘自 ASCE1885

發佈留言