微吼云上線多路互動直播服務 加速多場景互動直播落地
739
2025-04-03
前言
經常聽人們說Java語言的數據類型分為基本數據類型和引用數據類型。那有人要問了,到底什么是數據類型,什么是基本數據類型,什么是引用數據類型啊?
別急,聽二當家的慢慢說。
注:本文不是單純的搬運,而是二當家的經驗和思想的總結,希望能幫助大家加深理解。
什么是數據類型
如果要解釋什么是數據類型,那可能先要搞明白什么是數據,從百科引用一下。
數據(data)是事實或觀察的結果,是對客觀事物的邏輯歸納,是用于表示客觀事物的未經加工的原始素材。
數據可以是連續的值,比如聲音、圖像,稱為模擬數據;也可以是離散的,如符號、文字,稱為數字數據。
在計算機系統中,數據以二進制信息單元0、1的形式表示。
百科的解釋非常嚴謹,但可能有點抽象。我再通俗的解釋下,這么說吧,計算機里我們看見的,聽見的都是數據。說白了,我們用計算機,其實就是用的數據。
圖片,視頻,音樂,文檔都是數據。
而數據類型就是數據的類型嘛,我知道我說了等于沒說哈,哈哈哈。
而Java的數據類型其實就是指Java里可以用來定義數據的類型。
其實二當家的知道來看文的小伙伴都是專業的大佬,肯定知道什么是數據,什么是數據類型,我只是想闡述下我是如何理解的,希望能幫助小伙伴們去更好的理解。
什么是基本數據類型
如果計算機里存儲的萬物都是數據,那么數據就是基本單位嘍?就像從化學角度看萬物都是元素組成,所以元素的種類對應的就是基本數據類型。
再比如積木,積木可以拼成各種各樣的形狀,但是它也有基本單位,而那個最小的幾種就是基本數據類型。
Java語言規定了8種基本數據類型。也就是在Java的世界,只有8種元素,只有8種積木。
而我們想要用Java語言定義任何復雜數據類型最終都是用基本數據類型組合而成。就像元素組成化合物,積木拼成大的形狀一樣。
基本數據類型的種類
其實這部分內容不是本文的重點,很多文都說過,但是二當家的還是也說說吧,說的不好的地方,小伙伴敬請諒解。
整型
byte 、short 、int 、long
浮點型
float 、 double
字符型
char
布爾型
boolean
注:
其實JVM標準里并沒有規定boolean實際占用幾個字節,但是它本身只有2個值,用一位就夠了。然而操作系統想要定位內存,最小也只能按照字節尋址,所以你就算只需要1位就夠了,但是實際占用至少也得是1個字節,具體占多少可以由虛擬機實現決定,我覺得大家應該基本都是占了一個字節,不能少,多了沒必要。
局部變量是沒有默認值的
上面的這些類型就是Java語言里可以用來存儲業務數據的全部類型了。
什么是引用數據類型
引用就是內存地址,就像我們現實的地址一樣。
我用積木拼了一棟大樓,我現在需要裝修師傅幫忙裝修,我有兩種辦法,一種是把大樓帶到師傅面前,還有一種是我把大樓的地址給師傅,讓他過來。
內存有一個特點,就是訪問任何位置的速度是一樣的。你可以認為沒有路程花費,這一點和現實是有區別的,你就當做是時空穿梭吧。但是拷貝內存數據,寫數據卻是實打實的要花費時間的。所以內存里的數據,尤其是大塊的內存,通常都是傳遞地址,進行程序邏輯,因為這樣快,而且所有程序邏輯修改的都是同一份數據,這也恰好符合一般的程序邏輯。
講的深入一點,調用方法的時候,方法參數都是利用棧去傳遞的,進入方法前分配空間,方法結束后回收空間,這部分空間的生命周期和方法調用周期一致,換句話說,你調用完某個方法,它的參數和返回值就都被銷毀了,你要是想要留著,就得搞一份副本,或者說拷貝,所以如果你是直接把房子搬到師傅面前,那么師傅處理完房子后,你得根據師傅裝修的房子,原樣自己裝修一把,也就是拷貝。但是這樣的事情在Java里不會發生,因為Java里除了基本數據類型外,其他數據類型的參數傳遞和方法返回,都是用的引用,也就是地址。作為調用方,如果是參數,那么傳遞給被調用方法的參數本身就是一份地址拷貝,所以調用方自己那里肯定有一份源地址,而如果是方法的返回值,那么你就得接收,否則方法返回值就被銷毀了,也就無法再去訪問方法返回值了。
另外對于實例方法,修改實例屬性,其實是編譯器會把實例的引用傳遞進去,名稱就是“this”。
在Java的世界里除了基本數據類型外,剩下的數據類型都是引用數據類型。
引用數據類型的種類
人們普遍認為Java引用數據類型有三種:數組,接口,類。
當我們定義引用數據類型的變量時,只需要能放下地址的空間,至于它里面實際存了什么,我們需要尋址過去,里面可能繼續是引用類型,或者存儲真實數據的基本數據類型。
尾聲
真正有用的業務數據都是存在基本數據類型的,而復雜數據類型,是用來整合數據的。
復雜數據類型里包含基本數據類型的屬性,引用類型的屬性,還有就是邏輯方法了。基本數據類型是真正存放數據的,而復雜數據類型,自定義數據類型,引用數據類型,其實就是容器,盒子,箱子,它把一些基本數據類型的數據整合到一起,劃分到一組,來協同作用,邏輯則是對數據的一系列操作。
所以大神曾說過程序就是數據加上邏輯。
Java
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。