- Java程序員面試筆試寶典(第2版)
- 何昊等編著
- 1197字
- 2022-06-17 16:00:46
1.12 Java基本的數據類型
Java語言一共提供了八種原始的數據類型(byte、short、int、long、float、double、char、boolean),這些數據類型不是對象,而是Java中不同于類的特殊類型,這些基本類型的數據變量在聲明之后就會立刻在棧上分配內存空間。除了這八種基本的數據類型外,其他類型都是引用類型(例如類、接口、數組等),引用類型類似于C++中的引用或指針的概念,它以特殊的方式指向對象實體,這類變量在聲明時不會被分配內存空間,只是存儲了一個內存地址而已。
表1-1所展示的是Java中基本數據類型及其描述。
表1-1 不同數據類型對比

以上這些基本類型可以分為如下四種類型。
1)int長度數據類型:byte(8bits)、short(16bits)、int(32bits)、long(64bits)。
2)float長度數據類型:單精度(32bits float)、雙精度(64bits double)。
3)boolean類型變量的取值:true、false。對于boolean占用空間的大小,從理論上講,只需要1bit就夠了,但在設計的時候為了考慮字節(jié)對齊等因素,一般會考慮使其占用一個字節(jié)。由于Java規(guī)范沒有明確的規(guī)定,因此,不同的JVM可能會有不同的實現。
4)char數據類型:Unicode字符,16位。
此外,Java語言還提供了對這些原始數據類型的包裝類(字符類型Character,布爾類型Boolean,數值類型Byte、Short、Integer、Long、Float、Double)。需要注意的是,Java中的數值類型都是有符號的,不存在無符號的數,它們的取值范圍也是固定的,不會隨著硬件環(huán)境或者操作系統的改變而改變。除了以上提到的八種基本數據類型以外,在Java語言中,還存在另外一種基本類型void,它也有對應的包裝類java.lang.void,只是無法直接對它進行操作而已。包裝類型和原始類型有許多不同點,首先,原始數據類型在傳遞參數的時候都是按值傳遞,而包裝類型是按引用傳遞的。當包裝類型和原始類型用作某個類的實例數據時所指定的默認值(默認初始化的時候會把對應內存中所有的位都設置為0),例如數字是0(包括byte、short、int、long等類型),boolean是false,浮點(包括float、double)是0.0f,引用是null。對象引用實例變量的默認值為null,而原始類型實例變量的默認值與它們的類型有關(如int默認初始化為0)。如下例所示:

程序運行結果為:

除了以上需要注意的內容外,在Java語言中,默認聲明的小數是double類型的,因此在對float類型的變量進行初始化時需要進行類型轉換。float類型有兩種初始化方法:float f=1.0f或float f=(float)1.0。與此類似的是,在Java語言中,直接寫的整型數字是int類型的,如果在給數據類型為long的變量直接賦值時,int類型的值無法表示一個非常大的數字,因此,在賦值的時候可以通過如下的方法來賦值:long l=26012402244L。
引申:
(1)在Java語言中null值是什么?在內存中null是什么?
null不是一個合法的Object實例,所以編譯器并沒有為其分配內存,它僅僅用于表明該引用目前沒有指向任何對象。其實,與C語言類似,null是對引用變量的值全部置0。
(2)如何理解賦值語句String x=null?
在Java語言中,變量被分為兩大類型:原始值(primitive)與引用值(reference)。聲明為原始類型的變量,其存儲的是實際的值。聲明為引用類型的變量,存儲的是實際對象的地址(指針,引用)。對于賦值語句String x=null,它定義了一個變量“x”,x中存放的是String引用,此處為null。
- TestNG Beginner's Guide
- R語言編程指南
- JavaScript前端開發(fā)與實例教程(微課視頻版)
- Building a Recommendation Engine with Scala
- PHP+MySQL+Dreamweaver動態(tài)網站開發(fā)實例教程
- Python機器學習編程與實戰(zhàn)
- 飛槳PaddlePaddle深度學習實戰(zhàn)
- 新一代SDN:VMware NSX 網絡原理與實踐
- Building Serverless Web Applications
- Natural Language Processing with Python Quick Start Guide
- ASP.NET求職寶典
- C++程序設計教程
- Java7程序設計入門經典
- Hands-On Dependency Injection in Go
- Python計算機視覺與深度學習實戰(zhàn)