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在棧中的內存被釋放掉