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);
-
- }
-
- }
上面代碼的輸出是: