
前言
經常聽人們說Java語言的資料型別分為基本資料型別和參考資料型別,那有人要問了,到底什么是資料型別,什么是基本資料型別,什么是參考資料型別啊?
別急,聽二當家的慢慢說,
注:本文不是單純的搬運,而是二當家的經驗和思想的總結,希望能幫助大家加深理解,
本文由 二當家的白帽子 https://le-yi.blog.csdn.net/ 博客原創,轉載請注明來源,謝謝~
文章目錄
- 前言
- 什么是資料型別
- 什么是基本資料型別
- 基本資料型別的種類
- 什么是參考資料型別
- 參考資料型別的種類
- 尾聲
什么是資料型別
如果要解釋什么是資料型別,那可能先要搞明白什么是資料,從百科參考一下,
資料(data)是事實或觀察的結果,是對客觀事物的邏輯歸納,是用于表示客觀事物的未經加工的原始素材,
資料可以是連續的值,比如聲音、影像,稱為模擬資料;也可以是離散的,如符號、文字,稱為數字資料,
在計算機系統中,資料以二進制資訊單元0、1的形式表示,
百科的解釋非常嚴謹,但可能有點抽象,我再通俗的解釋下,這么說吧,計算機里我們看見的,聽見的都是資料,說白了,我們用計算機,其實就是用的資料,
圖片,視頻,音樂,檔案都是資料,
而資料型別就是資料的型別嘛,我知道我說了等于沒說哈,哈哈哈,
而Java的資料型別其實就是指Java里可以用來定義資料的型別,
其實二當家的知道來看文的小伙伴都是專業的大佬,肯定知道什么是資料,什么是資料型別,我只是想闡述下我是如何理解的,希望能幫助小伙伴們去更好的理解,
什么是基本資料型別
如果計算機里存盤的萬物都是資料,那么資料就是基本單位嘍?就像從化學角度看萬物都是元素組成,所以元素的種類對應的就是基本資料型別,
再比如積木,積木可以拼成各種各樣的形狀,但是它也有基本單位,而那個最小的幾種就是基本資料型別,
Java語言規定了8種基本資料型別,也就是在Java的世界,只有8種元素,只有8種積木,
而我們想要用Java語言定義任何復雜資料型別最終都是用基本資料型別組合而成,就像元素組成化合物,積木拼成大的形狀一樣,
基本資料型別的種類
其實這部分內容不是本文的重點,很多文都說過,但是二當家的還是也說說吧,說的不好的地方,小伙伴敬請諒解,
-
整型
byte 、short 、int 、long
-
浮點型
float 、 double
-
字符型
char
-
布爾型
boolean
| 資料型別 | 占用位元組 | 默認值 | 取值范圍 |
|---|---|---|---|
| byte(位元組型) | 1 | 0 | -128 ~ 127 |
| short(短整型) | 2 | 0 | -32768 ~ 32767 |
| int(整型) | 4 | 0 | -231 ~ (231) - 1 |
| long(長整型) | 8 | 0l | -263 ~ (263) - 1 |
| float(浮點型) | 4 | 0f | 3.402823e+38~1.401298e-45 |
| double(雙精度浮點型) | 8 | 0 | 1.797693e+308~4.9000000e-324 |
| char(字符型) | 2 | \u0000 | 各種unicode字符 |
| boolean(布爾型) | 視情況而定 | false | true,false |
注:
-
其實JVM標準里并沒有規定boolean實際占用幾個位元組,但是它本身只有2個值,用一位就夠了,然而作業系統想要定位記憶體,最小也只能按照位元組尋址,所以你就算只需要1位就夠了,但是實際占用至少也得是1個位元組,具體占多少可以由虛擬機實作決定,我覺得大家應該基本都是占了一個位元組,不能少,多了沒必要,
-
區域變數是沒有默認值的
-
上面的這些型別就是Java語言里可以用來存盤業務資料的全部型別了,
什么是參考資料型別
參考就是記憶體地址,就像我們現實的地址一樣,
我用積木拼了一棟大樓,我現在需要裝修師傅幫忙裝修,我有兩種辦法,一種是把大樓帶到師傅面前,還有一種是我把大樓的地址給師傅,讓他過來,
記憶體有一個特點,就是訪問任何位置的速度是一樣的,你可以認為沒有路程花費,這一點和現實是有區別的,你就當做是時空穿梭吧,但是拷貝記憶體資料,寫資料卻是實打實的要花費時間的,所以記憶體里的資料,尤其是大塊的記憶體,通常都是傳遞地址,進行程式邏輯,因為這樣快,而且所有程式邏輯修改的都是同一份資料,這也恰好符合一般的程式邏輯,
講的深入一點,呼叫方法的時候,方法引數都是利用堆疊去傳遞的,進入方法前分配空間,方法結束后回收空間,這部分空間的生命周期和方法呼叫周期一致,換句話說,你呼叫完某個方法,它的引數和回傳值就都被銷毀了,你要是想要留著,就得搞一份副本,或者說拷貝,所以如果你是直接把房子搬到師傅面前,那么師傅處理完房子后,你得根據師傅裝修的房子,原樣自己裝修一把,也就是拷貝,但是這樣的事情在Java里不會發生,因為Java里除了基本資料型別外,其他資料型別的引數傳遞和方法回傳,都是用的參考,也就是地址,作為呼叫方,如果是引數,那么傳遞給被呼叫方法的引數本身就是一份地址拷貝,所以呼叫方自己那里肯定有一份源地址,而如果是方法的回傳值,那么你就得接收,否則方法回傳值就被銷毀了,也就無法再去訪問方法回傳值了,
另外對于實體方法,修改實體屬性,其實是編譯器會把實體的參考傳遞進去,名稱就是“this”,
在Java的世界里除了基本資料型別外,剩下的資料型別都是參考資料型別,
參考資料型別的種類
人們普遍認為Java參考資料型別有三種:陣列,介面,類,
當我們定義參考資料型別的變數時,只需要能放下地址的空間,至于它里面實際存了什么,我們需要尋址過去,里面可能繼續是參考型別,或者存盤真實資料的基本資料型別,
尾聲
真正有用的業務資料都是存在基本資料型別的,而復雜資料型別,是用來整合資料的,
復雜資料型別里包含基本資料型別的屬性,參考型別的屬性,還有就是邏輯方法了,基本資料型別是真正存放資料的,而復雜資料型別,自定義資料型別,參考資料型別,其實就是容器,盒子,箱子,它把一些基本資料型別的資料整合到一起,劃分到一組,來協同作用,邏輯則是對資料的一系列操作,
所以大神曾說程序式就是資料加上邏輯,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289110.html
標籤:其他
上一篇:Java崗大廠面試百日沖刺 - 榷訓月累,每日三題【Day9】 —— SpringBoot1
下一篇:leetcode-215
