Java基本類型和包裝類型的區(qū)別
包裝類型可以為 null,而基本類型不可以
別小看這一點(diǎn)區(qū)別,它使得包裝類型可以應(yīng)用于 POJO 中,而基本類型則不行。
POJO 是什么呢?這里稍微說明一下。
POJO 的英文全稱是 Plain Ordinary Java Object,翻譯一下就是,簡(jiǎn)單無規(guī)則的 Java 對(duì)象,只有屬性字段以及 setter 和 getter 方法,示例如下。
class Writer {
private Integer age;
private String name;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
和 POJO 類似的,還有數(shù)據(jù)傳輸對(duì)象 DTO(Data Transfer Object,泛指用于展示層與服務(wù)層之間的數(shù)據(jù)傳輸對(duì)象)、視圖對(duì)象 VO(View Object,把某個(gè)頁面的數(shù)據(jù)封裝起來)、持久化對(duì)象 PO(Persistant Object,可以看成是與數(shù)據(jù)庫中的表映射的 Java 對(duì)象)。
那為什么 POJO 的屬性必須要用包裝類型呢? 數(shù)據(jù)庫的查詢結(jié)果可能是 null,如果使用基本類型的話,因?yàn)橐詣?dòng)拆箱(將包裝類型轉(zhuǎn)為基本類型,比如說把 Integer 對(duì)象轉(zhuǎn)換成 int 值),就會(huì)拋出 NullPointerException 的異常。
包裝類型可用于泛型,而基本類型不可以
泛型不能使用基本類型,因?yàn)槭褂没绢愋蜁r(shí)會(huì)編譯出錯(cuò)。
List<int> list = new ArrayList<>(); // 提示 Syntax error, insert "Dimensions" to complete ReferenceType List<Integer> list = new ArrayList<>();
為什么呢?因?yàn)榉盒驮诰幾g時(shí)會(huì)進(jìn)行類型擦除,最后只保留原始類型,而原始類型只能是 Object 類及其子類——基本類型是個(gè)特例。
基本類型比包裝類型更高效
基本類型在棧中直接存儲(chǔ)的具體數(shù)值,而包裝類型則存儲(chǔ)的是堆中的引用。

很顯然,相比較于基本類型而言,包裝類型需要占用更多的內(nèi)存空間。假如沒有基本類型的話,對(duì)于數(shù)值這類經(jīng)常使用到的數(shù)據(jù)來說,每次都要通過 new 一個(gè)包裝類型就顯得非常笨重。
兩個(gè)包裝類型的值可以相同,但卻不相等
兩個(gè)包裝類型的值可以相同,但卻不相等——這句話怎么理解呢?來看一段代碼就明明白白了。
Integer chenmo = new Integer(10); Integer wanger = new Integer(10); System.out.println(chenmo == wanger); // false System.out.println(chenmo.equals(wanger )); // true
兩個(gè)包裝類型在使用“”進(jìn)行判斷的時(shí)候,判斷的是其指向的地址是否相等。chenmo 和 wanger 兩個(gè)變量使用了 new 關(guān)鍵字,導(dǎo)致它們?cè)凇啊钡臅r(shí)候輸出了 false。
而 chenmo.equals(wanger) 的輸出結(jié)果為 true,是因?yàn)?equals 方法內(nèi)部比較的是兩個(gè) int 值是否相等。源碼如下。
private final int value;
public int intValue() {
return value;
}
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
雖然 chenmo 和 wanger 的值都是 10,但他們并不相等。換句話說就是:將“==”操作符應(yīng)用于包裝類型比較的時(shí)候,其結(jié)果很可能會(huì)和預(yù)期的不符。
以上就是Java基本類型和包裝類型的區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于Java基本類型和包裝類型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- java基礎(chǔ)類型源碼解析之多角度講HashMap
- Java基礎(chǔ)類Class使用指南
- 講解Java中的基礎(chǔ)類庫和語言包的使用
- 使用java基礎(chǔ)類實(shí)現(xiàn)zip壓縮和zip解壓工具類分享
- Java基礎(chǔ)之包裝類
- Java基礎(chǔ)詳解之包裝類的裝箱拆箱
- java——Byte類/包裝類的使用說明
- Java基本數(shù)據(jù)類型包裝類原理解析
- Java包裝類原理與用法實(shí)例分析
- Java包裝類的緩存機(jī)制原理實(shí)例詳解
- 詳解Java包裝類及自動(dòng)裝箱拆箱
- Java基本類型包裝類概述與Integer類、Character類用法分析
- Java基本數(shù)據(jù)類型與對(duì)應(yīng)的包裝類(動(dòng)力節(jié)點(diǎn)java學(xué)院整理)
- 詳細(xì)總結(jié)Java基礎(chǔ)類和包裝類
相關(guān)文章
使用restTemplate.postForEntity()的問題
這篇文章主要介紹了使用restTemplate.postForEntity()的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(53)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-08-08
Spring?AOP?的實(shí)現(xiàn)和切點(diǎn)表達(dá)式的實(shí)現(xiàn)方式
本文給大家介紹了Spring?AOP的基本概念、通知類型、切點(diǎn)表達(dá)式和切面優(yōu)先級(jí),并通過示例代碼展示了如何實(shí)現(xiàn)這些功能,感興趣的朋友跟隨小編一起看看吧2024-12-12
Mybatis通用Mapper(tk.mybatis)的使用
本文主要介紹了Mybatis通用Mapper(tk.mybatis)的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
一起來學(xué)習(xí)Java IO的轉(zhuǎn)化流
這篇文章主要為大家詳細(xì)介紹了Java IO的轉(zhuǎn)化流,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03
Java編程實(shí)現(xiàn)打地鼠文字游戲?qū)嵗a
這篇文章主要介紹了Java編程實(shí)現(xiàn)打地鼠文字游戲?qū)嵗a,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-11-11
redis防止重復(fù)提交的實(shí)現(xiàn)示例
在開發(fā)中我們都需要處理重復(fù)提交的問題,本文主要介紹了redis防止重復(fù)提交的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06

