Java的數(shù)據(jù)類型和參數(shù)傳遞(詳解)
Java提供的數(shù)據(jù)類型主要分為兩大類:基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。
Java中的基本數(shù)據(jù)類型
| 名稱 | 大小 | 取值范圍 |
| byte型 (字節(jié)) | 8bit | -128-127 (-2^7到2^7-1) |
|
short型 (短整型) |
16bit | -2^15到2^15-1 |
| int型 (整形) | 32bit | -2^31到2^31-1 |
| long型 (長整型) | 64bit | -2^63到2^63-1 |
| float型 (單精度浮點型) | 32bit | |
| double型 (雙精度浮點型) | 64bit | |
| char型 (字符型) | 16bit | |
| boolean型 (布爾型) | true和false | 只有兩種結果,要么為“真”要么為“假” |
Java中的引用數(shù)據(jù)類型:
Java作為面向?qū)ο蟮恼Z言,Java中所有用class,interface,abstract class定義的都屬于Java的引用數(shù)據(jù)類型。
如何理解Java中的基本數(shù)據(jù)類型和引用數(shù)據(jù)類型:
1.Java的基本數(shù)據(jù)類型是由Java語言本身提供的數(shù)據(jù)類型,不需要用戶自己定義;
2.Java中的引用數(shù)據(jù)類型則是由用戶自己定義的,而引用數(shù)據(jù)類型的定義需要用到基本數(shù)據(jù)類型;
3.從內(nèi)存關系上來說:
Java的的內(nèi)存分為兩大塊:棧內(nèi)存和堆內(nèi)存
棧內(nèi)存負責存儲方法中的基本數(shù)據(jù)類型變量和對象的引用變量
堆內(nèi)存負責存儲通過new關鍵字產(chǎn)生的數(shù)據(jù),也就是new關鍵字后面的類中的屬性和方法。
Java中基本數(shù)據(jù)類型存儲在棧內(nèi)存中,而引用數(shù)據(jù)類型的類型名存儲在棧內(nèi)存中,但是引用數(shù)據(jù)類型的內(nèi)容則存儲在堆內(nèi)存中。兩者之間通過地址來連接,實現(xiàn)互相的訪問。

4.數(shù)據(jù)由小范圍往大范圍轉(zhuǎn)換時,JVM會自動幫我們實現(xiàn)類型的轉(zhuǎn)換。比如:int i=10;long l=i;類似于這樣的數(shù)據(jù)轉(zhuǎn)換,Java的虛擬機可以自動幫我們來完成這個工作。但是當數(shù)據(jù)由大范圍往小范圍轉(zhuǎn)換時就需要手動的加上強制類型轉(zhuǎn)換。如果在轉(zhuǎn)過程中出現(xiàn)數(shù)據(jù)的溢出則根據(jù)小范圍的數(shù)據(jù)類型的值域進行變動。比如說把整形的-129賦值給byte這時候輸出byte的值就是127;如果把整形的128賦值給byte類型,那么輸出的就應該是-128。
Java中的參數(shù)傳遞:
基本數(shù)據(jù)類型:
public void test1(){
int i=10;
long l;
l=i;
System.out.println(i);//輸出值10
System.out.println(l);//輸出值10
l=i+1;
System.out.println(i);//輸出值10
System.out.println(l);//輸出值11
}
由于基本數(shù)據(jù)類型是變量名與變量值一同存儲在棧內(nèi)存中,i 和 l 這兩個變量是互相獨立的,對 l 的賦值操作并不會影響 i 值。
引用數(shù)據(jù)類型:
public class Book {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Test {
public static void main(String[] args) {
Book book1=new Book();
book1.setName("《百年孤獨》");
Book book2=new Book();
book2.setName("《圍城》");
System.out.println("book1:"+book1.getName());//輸出:book1:《百年孤獨》
System.out.println("book2:"+book2.getName());//輸出:book2:《圍城》
book1=book2;
book1.setName("《活著》");
System.out.println("book1:"+book1.getName());//輸出:book1:《活著》
System.out.println("book2:"+book2.getName());//book2:《活著》
}
}

第一次new了兩個對象分別是book1,book2他們的書名分別是“百年孤獨”和“圍城”。然后通過賦值,book1也指向了與book2一樣的內(nèi)存區(qū)域,這時無論是對book1 還是book2 進行操作影響的都是同一塊內(nèi)存區(qū)域了。這也就是為什么后面的輸出都是一樣的原因了。另外book1原先開辟的內(nèi)存空間由于沒有使用,JVM的垃圾回收機制會對其進行處理,將這些不用的內(nèi)存空間進行釋放。
以上這篇Java的數(shù)據(jù)類型和參數(shù)傳遞(詳解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java調(diào)度線程池ScheduledThreadPoolExecutor不執(zhí)行問題分析
最近項目上反饋某個重要的定時任務突然不執(zhí)行了,很頭疼,開發(fā)環(huán)境和測試環(huán)境都沒有出現(xiàn)過這個問題。定時任務采用的是ScheduledThreadPoolExecutor,后來一看代碼發(fā)現(xiàn)踩了一個大坑。本文就來和大家聊聊這次的踩坑記錄與解決方法,需要的可以參考一下2023-03-03
IDEA2020.1啟動SpringBoot項目出現(xiàn)java程序包:xxx不存在
這篇文章主要介紹了IDEA2020.1啟動SpringBoot項目出現(xiàn)java程序包:xxx不存在,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06

