1. 程式人生 > 其它 >java中基本資料型別和引用資料型別的區別

java中基本資料型別和引用資料型別的區別

Java中的基本資料型別和引用資料型別的區別
一、資料型別
Java中的資料型別分為兩大類,基本資料型別和引用資料型別。

1、基本資料型別
基本資料型別只有8種,可按照如下分類
①整數型別:long、int、short、byte
②浮點型別:float、double
③字元型別:char
④布林型別:boolean

No. 資料型別 大小/位 可表示資料範圍 預設值
1 byte(位元組型) 8 -128~127 0
2 short(短整型) 16 -32768~32767 0
3 int(整型) 32 -2147483648~2147483647 0
4 long(長整型) 64 -9223372036854775808~9223372036854775807 0
5 float(單精度) 32 -3.4E38~3.4E38 0.0
6 double(雙精度) 64 -1.7E308~1.7E308 0.0
7 char(字元) 16 0~255 '\u0000'
8 boolean(布林) - true或false false
2、引用資料型別
引用資料型別非常多,大致包括:
類、 介面型別、 陣列型別、 列舉型別、 註解型別、 字串型

例如,String型別就是引用型別。
簡單來說,所有的非基本資料型別都是引用資料型別。

二、基本資料型別和引用資料型別的區別
1、儲存位置
基本變數型別
在方法中定義的非全域性基本資料型別變數的具體內容是儲存在棧中的
引用變數型別
只要是引用資料型別變數,其具體內容都是存放在堆中的,而棧中存放的是其具體內容所在記憶體的地址
ps:通過變數地址可以找到變數的具體內容,就如同通過房間號可以找到房間一般
public class Main{
public static void main(String[] args){
//基本資料型別
int i=1;
double d=1.2;

   //引用資料型別
   String str="helloworld";

}
}

2、傳遞方式
基本變數型別
在方法中定義的非全域性基本資料型別變數,呼叫方法時作為引數是按數值傳遞的
//基本資料型別作為方法引數被呼叫
public class Main{
public static void main(String[] args){
int msg = 100;
System.out.println("呼叫方法前msg的值:\n"+ msg); //100
fun(msg);
System.out.println("呼叫方法後msg的值:\n"+ msg); //100
}
public static void fun(int temp){
temp = 0;
}
}

引用變數型別
引用資料型別變數,呼叫方法時作為引數是按引用傳遞的,傳遞的是引用的副本
//引用資料型別作為方法引數被呼叫

class Book{
String name;
double price;

public Book(String name,double price){
    this.name = name;
    this.price = price;
}
public void getInfo(){
    System.out.println("圖書名稱:"+ name + ",價格:" + price);
}

public void setPrice(double price){
    this.price = price;
}

}

public class Main{
public static void main(String[] args){
Book book = new Book("Java開發指南",66.6);
book.getInfo(); //圖書名稱:Java開發指南,價格:66.6
fun(book);
book.getInfo(); //圖書名稱:Java開發指南,價格:99.9
}

public static void fun(Book temp){
temp.setPrice(99.9);
}
}
呼叫時為temp在棧中開闢新空間,並指向book的具體內容,方法執行完畢後temp在棧中的記憶體被釋放掉