摘要:但是基本數據類型不是對象,不具備對象的特性不攜帶屬性沒有方法可調用。自動裝箱即直接賦值將會比使用構造方法的方式節省一塊堆內存空間,并自動入對象池。而手動裝箱使用構造方法會產生兩塊堆內存,而且不會保存在對象池中。
概念
java在設計之初,有一個基本原則:一切皆對象。但是基本數據類型不是對象,不具備“對象”的特性——不攜帶屬性、沒有方法可調用。為了解決此類問題,Java為每種基本數據類型分別設計了對應的類,稱之為包裝類(Wrapper Classes).
基本數據類型及對應的包裝類基本數據類型 | 對應的包裝類 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
每個包裝類的對象可以封裝一個相應的基本類型的數據,并提供了其它一些有用的方法。包裝類對象一經創建,其內容(所封裝的基本類型數據值)不可改變.
包裝類雖然都是object的子類,但嚴格來說又可分為兩種:
對象包裝類(object直接子類):Character、Boolean
數值包裝類(Number直接子類):Byte、Short、Integer、Long、Float、Double
Number繼承了Object類,是一個抽象類。里面定義了六個抽象方法:byteValue()、shortValue()、intValue()、longValue()、floatValue()、doubleValue()。
數據的裝箱與拆箱基本類型和對應的包裝類可以相互裝換:
由基本類型向對應的包裝類轉換稱為裝箱,例如把 int 包裝成 Integer 類的對象;
包裝類向對應的基本類型轉換稱為拆箱,例如把 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 等價于 obj1?" + obj.equals(obj1)); } } 輸出結果: n = 500 obj 等價于 obj1?true自動拆箱和裝箱
上面的例子都需要手動實例化一個包裝類,稱為手動拆箱、裝箱。Java 1.5 之前必須手動拆箱裝箱。
Java 1.5 之后可以自動拆箱裝箱,也就是在進行基本數據類型和對應的包裝類轉換時,系統將自動進行,并且可以直接利用包裝類進行數學計算。
示例:
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); //包裝類直接進行數學計算。 Integer obj1 = 10; System.out.println("obj 等價于 obj1?" + obj.equals(obj1)); } } 輸出結果: n = 10 20 obj 等價于 obj1?true
由于存在自動裝箱,那么object可以接收一切數據類型了,包括基本數據類型。
流程:基本數據類型--> 自動裝箱--> 向上轉型為object
但object類型不能直接轉為基本數據類型,要先轉為對應的包裝類,然后自動拆箱。
手動裝箱與自動裝箱的區別手動裝箱與自動裝箱與String兩種實例化方式的區別是一樣的。
自動裝箱(即直接賦值)將會比使用構造方法的方式節省一塊堆內存空間,并自動入對象池。而手動裝箱(使用構造方法)會產生兩塊堆內存,而且不會保存在對象池中。
但是和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)); } } 輸出結果: true false false true數據類型的轉換
包裝類提供了基本數據類型和String類型相互轉換的功能。
將 String 轉為基本數據類型Integer類: public static int parseInt(String s) Double類: public static double parseDouble(String s) Boolean類: public static boolean parseBoolean(String s) .....
需要注意的是Character類里面并不存在將字符串變為字符的方法,因為String類有一個charAt()的方法,可以根據索引取出字符。
基本數據類型轉為String有兩種方式:
任何基本數據類型與字符串使用了"+"操作之后都將轉為String類型。
在String類中定義有valueOf()方法,該方法可以接收所有的基本數據類型。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77608.html
摘要:前陣子,我們分享了中的基本數據類型轉換這篇文章,對許多粉絲還是有帶來幫助的,今天講一下包裝類的的由來,及自動裝箱拆箱的概念和原理。下面是基本數據類型與對應的包裝類型。 showImg(https://segmentfault.com/img/remote/1460000016537706); 前陣子,我們分享了《Java中的基本數據類型轉換》這篇文章,對許多粉絲還是有帶來幫助的,今天講...
摘要:包裝類基本數據類型如等。它們并不具備對象的特性,比如不能調用方法。為了讓基本數據類型也能具有對象的特性,為每個基本數據類型提供了包裝類。 包裝類 基本數據類型:如 int、float、double、boolean、char 等。它們并不具備對象的特性,比如不能調用方法。為了讓基本數據類型也能具有對象的特性,java為每個基本數據類型提供了包裝類。 基本類型和包裝類之間的對應關系: sh...
摘要:知識點總結常用類包裝類知識點總結常用類包裝類是一個面向對象的語言,但是中的基本數據類型卻不是面向對象的。但是我們在實際使用中經常將基本數據類型轉換成對象,便于操作。 Java知識點總結(常用類-包裝類) @(Java知識點總結)[Java, Java常用類] [toc] 包裝類(wrapper) Java是一個面向對象的語言,但是Java中的基本數據類型卻不是面向對象的。但是我們在實際...
摘要:第三階段常見對象的學習基本類型包裝類我們提出一個需求,將的二進制八進制十六進制算出來,對于這種基本類型的一些操作,包裝類就可以很好地解決這些問題。 第三階段 JAVA常見對象的學習 基本類型包裝類 我們提出一個需求,將520的二進制、八進制、十六進制算出來,對于這種基本類型的一些操作,包裝類就可以很好地解決這些問題。 public class IntegerDemo { pub...
摘要:實際上,中還存在另外一種基本類型,它也有對應的包裝類,不過我們無法直接對它們進行操作。這些變量在聲明時被指定為一個特定的類型,比如等。對象數組都是引用數據類型。語言支持一些特殊的轉義字符序列。 實例 對于數值類型的基本類型的取值范圍,我們無需強制去記憶,因為它們的值都已經以常量的形式定義在對應的包裝類中了。請看下面的例子: **public class PrimitiveTypeTes...
閱讀 2784·2021-09-01 10:30
閱讀 1680·2019-08-30 15:52
閱讀 965·2019-08-29 18:40
閱讀 1116·2019-08-28 18:30
閱讀 2391·2019-08-23 17:19
閱讀 1321·2019-08-23 16:25
閱讀 2700·2019-08-23 16:18
閱讀 2977·2019-08-23 13:53