摘要:但是基本數(shù)據(jù)類型不是對(duì)象,不具備對(duì)象的特性不攜帶屬性沒(méi)有方法可調(diào)用。自動(dòng)裝箱即直接賦值將會(huì)比使用構(gòu)造方法的方式節(jié)省一塊堆內(nèi)存空間,并自動(dòng)入對(duì)象池。而手動(dòng)裝箱使用構(gòu)造方法會(huì)產(chǎn)生兩塊堆內(nèi)存,而且不會(huì)保存在對(duì)象池中。
概念
java在設(shè)計(jì)之初,有一個(gè)基本原則:一切皆對(duì)象。但是基本數(shù)據(jù)類型不是對(duì)象,不具備“對(duì)象”的特性——不攜帶屬性、沒(méi)有方法可調(diào)用。為了解決此類問(wèn)題,Java為每種基本數(shù)據(jù)類型分別設(shè)計(jì)了對(duì)應(yīng)的類,稱之為包裝類(Wrapper Classes).
基本數(shù)據(jù)類型及對(duì)應(yīng)的包裝類基本數(shù)據(jù)類型 | 對(duì)應(yīng)的包裝類 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
每個(gè)包裝類的對(duì)象可以封裝一個(gè)相應(yīng)的基本類型的數(shù)據(jù),并提供了其它一些有用的方法。包裝類對(duì)象一經(jīng)創(chuàng)建,其內(nèi)容(所封裝的基本類型數(shù)據(jù)值)不可改變.
包裝類雖然都是object的子類,但嚴(yán)格來(lái)說(shuō)又可分為兩種:
對(duì)象包裝類(object直接子類):Character、Boolean
數(shù)值包裝類(Number直接子類):Byte、Short、Integer、Long、Float、Double
Number繼承了Object類,是一個(gè)抽象類。里面定義了六個(gè)抽象方法:byteValue()、shortValue()、intValue()、longValue()、floatValue()、doubleValue()。
數(shù)據(jù)的裝箱與拆箱基本類型和對(duì)應(yīng)的包裝類可以相互裝換:
由基本類型向?qū)?yīng)的包裝類轉(zhuǎn)換稱為裝箱,例如把 int 包裝成 Integer 類的對(duì)象;
包裝類向?qū)?yīng)的基本類型轉(zhuǎn)換稱為拆箱,例如把 Integer 類的對(duì)象重新簡(jiǎn)化為 int;
示例:
public class testDemo { public static void main(String[] args) { int m = 500; Integer obj = new Integer(m); // 手動(dòng)裝箱 int n = obj.intValue(); // 手動(dòng)拆箱 System.out.println("n = " + n); Integer obj1 = new Integer(500); System.out.println("obj 等價(jià)于 obj1?" + obj.equals(obj1)); } } 輸出結(jié)果: n = 500 obj 等價(jià)于 obj1?true自動(dòng)拆箱和裝箱
上面的例子都需要手動(dòng)實(shí)例化一個(gè)包裝類,稱為手動(dòng)拆箱、裝箱。Java 1.5 之前必須手動(dòng)拆箱裝箱。
Java 1.5 之后可以自動(dòng)拆箱裝箱,也就是在進(jìn)行基本數(shù)據(jù)類型和對(duì)應(yīng)的包裝類轉(zhuǎn)換時(shí),系統(tǒng)將自動(dòng)進(jìn)行,并且可以直接利用包裝類進(jìn)行數(shù)學(xué)計(jì)算。
示例:
public class testDemo { public static void main(String[] args) { Integer obj = 10; // 自動(dòng)裝箱 int n = obj; // 自動(dòng)拆箱 System.out.println("n = " + n); System.out.println(obj * 2); //包裝類直接進(jìn)行數(shù)學(xué)計(jì)算。 Integer obj1 = 10; System.out.println("obj 等價(jià)于 obj1?" + obj.equals(obj1)); } } 輸出結(jié)果: n = 10 20 obj 等價(jià)于 obj1?true
由于存在自動(dòng)裝箱,那么object可以接收一切數(shù)據(jù)類型了,包括基本數(shù)據(jù)類型。
流程:基本數(shù)據(jù)類型--> 自動(dòng)裝箱--> 向上轉(zhuǎn)型為object
但object類型不能直接轉(zhuǎn)為基本數(shù)據(jù)類型,要先轉(zhuǎn)為對(duì)應(yīng)的包裝類,然后自動(dòng)拆箱。
手動(dòng)裝箱與自動(dòng)裝箱的區(qū)別手動(dòng)裝箱與自動(dòng)裝箱與String兩種實(shí)例化方式的區(qū)別是一樣的。
自動(dòng)裝箱(即直接賦值)將會(huì)比使用構(gòu)造方法的方式節(jié)省一塊堆內(nèi)存空間,并自動(dòng)入對(duì)象池。而手動(dòng)裝箱(使用構(gòu)造方法)會(huì)產(chǎn)生兩塊堆內(nèi)存,而且不會(huì)保存在對(duì)象池中。
但是和String不同的是包裝對(duì)象沒(méi)有intern()方法,無(wú)法手動(dòng)入池。
示例:
public class testDemo { public static void main(String[] args) { Integer obja = 10;//直接賦值,自動(dòng)裝箱 Integer objb = 10; //直接賦值,自動(dòng)裝箱 Integer objc = new Integer(10); //手動(dòng)裝箱 System.out.println(obja == objb); System.out.println(obja == objc); System.out.println(objb == objc); System.out.println(obja.equals(objc)); } } 輸出結(jié)果: true false false true數(shù)據(jù)類型的轉(zhuǎn)換
包裝類提供了基本數(shù)據(jù)類型和String類型相互轉(zhuǎn)換的功能。
將 String 轉(zhuǎn)為基本數(shù)據(jù)類型Integer類: public static int parseInt(String s) Double類: public static double parseDouble(String s) Boolean類: public static boolean parseBoolean(String s) .....
需要注意的是Character類里面并不存在將字符串變?yōu)樽址姆椒?,因?yàn)镾tring類有一個(gè)charAt()的方法,可以根據(jù)索引取出字符。
基本數(shù)據(jù)類型轉(zhuǎn)為String有兩種方式:
任何基本數(shù)據(jù)類型與字符串使用了"+"操作之后都將轉(zhuǎn)為String類型。
在String類中定義有valueOf()方法,該方法可以接收所有的基本數(shù)據(jù)類型。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/77608.html
摘要:前陣子,我們分享了中的基本數(shù)據(jù)類型轉(zhuǎn)換這篇文章,對(duì)許多粉絲還是有帶來(lái)幫助的,今天講一下包裝類的的由來(lái),及自動(dòng)裝箱拆箱的概念和原理。下面是基本數(shù)據(jù)類型與對(duì)應(yīng)的包裝類型。 showImg(https://segmentfault.com/img/remote/1460000016537706); 前陣子,我們分享了《Java中的基本數(shù)據(jù)類型轉(zhuǎn)換》這篇文章,對(duì)許多粉絲還是有帶來(lái)幫助的,今天講...
摘要:包裝類基本數(shù)據(jù)類型如等。它們并不具備對(duì)象的特性,比如不能調(diào)用方法。為了讓基本數(shù)據(jù)類型也能具有對(duì)象的特性,為每個(gè)基本數(shù)據(jù)類型提供了包裝類。 包裝類 基本數(shù)據(jù)類型:如 int、float、double、boolean、char 等。它們并不具備對(duì)象的特性,比如不能調(diào)用方法。為了讓基本數(shù)據(jù)類型也能具有對(duì)象的特性,java為每個(gè)基本數(shù)據(jù)類型提供了包裝類。 基本類型和包裝類之間的對(duì)應(yīng)關(guān)系: sh...
摘要:知識(shí)點(diǎn)總結(jié)常用類包裝類知識(shí)點(diǎn)總結(jié)常用類包裝類是一個(gè)面向?qū)ο蟮恼Z(yǔ)言,但是中的基本數(shù)據(jù)類型卻不是面向?qū)ο蟮?。但是我們?cè)趯?shí)際使用中經(jīng)常將基本數(shù)據(jù)類型轉(zhuǎn)換成對(duì)象,便于操作。 Java知識(shí)點(diǎn)總結(jié)(常用類-包裝類) @(Java知識(shí)點(diǎn)總結(jié))[Java, Java常用類] [toc] 包裝類(wrapper) Java是一個(gè)面向?qū)ο蟮恼Z(yǔ)言,但是Java中的基本數(shù)據(jù)類型卻不是面向?qū)ο蟮摹5俏覀冊(cè)趯?shí)際...
摘要:第三階段常見(jiàn)對(duì)象的學(xué)習(xí)基本類型包裝類我們提出一個(gè)需求,將的二進(jìn)制八進(jìn)制十六進(jìn)制算出來(lái),對(duì)于這種基本類型的一些操作,包裝類就可以很好地解決這些問(wèn)題。 第三階段 JAVA常見(jiàn)對(duì)象的學(xué)習(xí) 基本類型包裝類 我們提出一個(gè)需求,將520的二進(jìn)制、八進(jìn)制、十六進(jìn)制算出來(lái),對(duì)于這種基本類型的一些操作,包裝類就可以很好地解決這些問(wèn)題。 public class IntegerDemo { pub...
摘要:實(shí)際上,中還存在另外一種基本類型,它也有對(duì)應(yīng)的包裝類,不過(guò)我們無(wú)法直接對(duì)它們進(jìn)行操作。這些變量在聲明時(shí)被指定為一個(gè)特定的類型,比如等。對(duì)象數(shù)組都是引用數(shù)據(jù)類型。語(yǔ)言支持一些特殊的轉(zhuǎn)義字符序列。 實(shí)例 對(duì)于數(shù)值類型的基本類型的取值范圍,我們無(wú)需強(qiáng)制去記憶,因?yàn)樗鼈兊闹刀家呀?jīng)以常量的形式定義在對(duì)應(yīng)的包裝類中了。請(qǐng)看下面的例子: **public class PrimitiveTypeTes...
閱讀 2879·2021-09-01 10:30
閱讀 1734·2019-08-30 15:52
閱讀 1045·2019-08-29 18:40
閱讀 1205·2019-08-28 18:30
閱讀 2451·2019-08-23 17:19
閱讀 1401·2019-08-23 16:25
閱讀 2802·2019-08-23 16:18
閱讀 3058·2019-08-23 13:53