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