1. 程式人生 > >Java基本型別的自動裝箱與自動拆箱

Java基本型別的自動裝箱與自動拆箱

一、簡介

java是面入物件程式設計的語言,所有的都表示為物件。那麼對於基本型別,java提供了對應的包裝類。

相應的就有自動裝箱與自動拆箱操作。

二、自動裝箱操作

1、定義

自動裝箱是指基本型別轉為對應的包裝類,如int轉Integer,double轉為Double等。

2、轉換方法

轉換的方式是通過Integer.valueOf()、Double.valueOf()等方式(注意此時涉及到對應包裝類的靜態快取問題,

詳情請檢視本部落格的 java基本型別對應包裝類的靜態快取)

3、轉換時機

當對包裝型別的變數進行賦值或傳值時,會進行自動裝箱操作。

特別注意,當對包裝類變數進行多次運算(如迴圈)且值不在靜態快取內(-128到127內)時,

這時會多次new相應的物件,會製造很多無用的物件例項。

4、在方法中傳遞包裝類物件

此時傳遞的雖是物件引用,但由於經過運算修改後,方法內的變數(或者說是執行緒內的變數)是新建(new)

的包裝類,因此,方法外面的包裝類變數,並不會隨著方法內變數值的改變而改變。

三、自動拆箱操作

1、定義

自動拆箱是指將包裝類轉為基本型別,如Integer轉為int、Double轉為double等

2、轉換方法

轉換的方式是通過Integer.intValue()、Double.doubleValue();

3、轉換時機

當進行算術運算或給基本型別賦值時,會進行拆箱操作

四、程式碼例項

public class 
BaseTypeBoxingMain { public static void main(String[] args) { autoBoxing1(); //自動裝箱例1 基本裝箱操作 autoBoxing2(); //自動裝箱例2 會新建多個無用的物件 unBoxing(); //自動拆箱示例 System.out.println("====================包裝類物件方法間傳遞===================="); Integer i= 1; System.out.println("source i:"+i); changeValue(i); //方法呼叫,試圖修改值,結果是不成功的
System.out.println("after invoke changeValue , i:"+i); } //自動裝箱例1 static void autoBoxing1() { System.out.println("======================自動裝箱例1==========================="); Integer i1 = 1; //Integer.valueOf() 快取取 Integer i2 = 1; //Integer.valueOf() 快取取 System.out.println(i1 == i2); Integer i5 = 222; //Integer.valueOf() new Integer i6 = 222; //Integer.valueOf() new System.out.println(i5 == i6); Double d1 = 1d; //Double.valueOf() new Double d2 = 1d; //Double.valueOf() new System.out.println(d1 == d2); Double d3 = 222d; //Double.valueOf() new Double d4 = 222d; //Double.valueOf() new System.out.println(d3 == d4); } //自動裝箱例2 static void autoBoxing2() { System.out.println("======================自動裝箱例2==========================="); Integer cnt = 1; for (int i = 200; i < 203; i++) { //此時會建立3個新的Integer例項 cnt += 1; System.out.println(System.identityHashCode(cnt)); //hashcode不一樣,也就是儲存地址不一樣,也就說不是同一個物件 } } //自動拆箱 static void unBoxing() { System.out.println("======================自動拆箱示例==========================="); Integer i1 = 1; int i2 = i1; //基本型別賦值 i2=i1.intValue() System.out.println(i2); int i3 = i1 + 1; // 基本型別進行運算 i3=i1.intValue()+1 System.out.println(i3); } static void changeValue(Integer val) { val = 2; System.out.println("in changeValue ,i:"+val); } }
執行結果:

======================自動裝箱例1===========================
true
false
false
false
======================自動裝箱例2===========================
1625635731
1580066828
491044090
======================自動拆箱示例===========================
1
2
====================包裝類物件方法間傳遞====================
source i:1
in changeValue ,i:2
after invoke changeValue , i:1

相關推薦

Java自動裝箱自動機制

以下筆記來自於《演算法 (第4版)》。   型別引數必須被例項化為引用型別,因此Java有一種特殊機制來使泛型程式碼能夠處理原始資料型別。 Java中的封裝型別都是原始資料型別所對應的引用型別:Boolean Byte Character Double Float Intege

Java學習筆記09--靜態匯入 ;增強for迴圈 ;可變引數 ;自動裝箱自動;FILE(檔案操作)

∆ 靜態匯入: 靜態匯入的作用: 簡化書寫。 靜態匯入可以作用一個類的所有靜態成員。 靜態匯入的格式: import static 包名.類名.靜態的成員; 靜態匯入要注意的事項:

Java基本型別的自動裝箱自動

一、簡介 java是面入物件程式設計的語言,所有的都表示為物件。那麼對於基本型別,java提供了對應的包裝類。 相應的就有自動裝箱與自動拆箱操作。 二、自動裝箱操作 1、定義 自動裝箱是指基本型別轉為對應的包裝類,如int轉Integer,double轉為Double等。

java基本型別基本型別包裝型比較時的自動自動裝箱

java中,任何物件都繼承自Object,所以都有equals()方法。在基本型別中,兩個數值之間的比較==和equals()方法,比較的都是兩個運算元的地址,地址相同,則返回值為true。在物件中,不管是自己寫的物件還是java中已經有的物件,如果這個類物件複寫了繼承自O

基本型別自動裝箱

先說幾個要注意的地方,然後根據以下的結論來分析兩個題目。 1.所有數值型別都有正負號 2.浮點數值有後綴f或F,表示float型別,沒有的話預設為double型別,double可加可不加字尾d或D。long型有後綴l或L 3.不同型別運算結果向右靠齊 char<sh

Java自動裝箱詳解

sans 做的 sys 實例 代碼 而在 byte 裝箱 bsp 在講裝箱與拆箱之前我們要先了解一下這個問題的來源: Java中的類型分為基本類型(Primitive type)和類類型(Class type)兩種: 基本類型包括byte型、char型、short型

詳解Java自動裝箱(Autoboxing and unboxing)

初始 BE 運算 null 異常 內存 判斷 運行 double 一、什麽是自動裝箱拆箱 很簡單,下面兩句代碼就可以看到裝箱和拆箱過程 1 //自動裝箱 2 Integer total = 99; 3 4 //自定拆箱 5 int totalprim = total;

Java學習筆記之——自動裝箱

自動裝箱與拆箱 基本型別與引用型別的互相轉換 1. 基本型別對應的包裝類 byte    short       char      int &

Java 自動裝箱

什麼是自動裝箱拆箱 基本資料型別的自動裝箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0開始提供的功能。  一般我們要建立一個類的物件例項的時候,我們會這樣:  Class a = new Class(parameter);  當我們建立

4.3 詳解Java自動裝箱 > 我的程式猿之路:第三十三章

1 //自動裝箱 2 Integer total = 99; 3 4 //自定拆箱 5 int totalprim = total; 簡單一點說,裝箱就是自動將基本資料型別轉換為包裝器型別;拆箱就是自動將包裝器型別轉換為基本資料型別。 下面我們來看看需要裝箱拆箱的型別有哪些: 這個過程是自動執

基本型別包裝類、自動裝箱

基本型別包裝類 public class Demo03 { public static void main(String[] args) { //字串轉基本資料型別 String str="12"; int strint=Integer.p

Java中的自動裝箱

自動裝箱和拆箱從Java 1.5開始引入,目的是將原始型別值轉自動地轉換成對應的物件。自動裝箱與拆箱的機制可以讓我們在Java的變數賦值或者是方法呼叫等情況下使用原始型別或者物件型別更加簡單直接。 如果你在Java1.5下進行過程式設計的話,你一定不會陌生這一點

Java自動裝箱

1、自動裝箱Integer iObj = 3;//自動裝箱2、自動拆箱System.out.println(iObj + 12); //自動拆箱3、演示程式碼package cn.sunft.day01

JAVA基本型別和包裝類的裝箱

JAVA的包裝類 Java語言是一個面向物件的語言,但是Java中的基本資料型別卻是不面向物件的,這在實際使用時存在很多的不便,為了解決這個不足,在設計類時為每個基本資料型別設計了一個對應的類進行代表,這樣八個和基本資料型別對應的類統稱為包裝類(Wrapper Class)

Java包裝類、自動裝箱知識總結

因為在學習集合時知道集合裡存放的物件都是Object型別,取出的時候需要強制型別轉換為目標型別(使用泛型集合不需要),如int a = (Integer)arrayList.get(0);然後我們就會發現,為什麼要強制轉換為Integer,而不是int呢?int與Integ

java自動裝箱詳解

什麼是自動裝箱拆箱 基本資料型別的自動裝箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0開始提供的功能。 一般我們要建立一個類的物件例項的時候,我們會這樣: Class a = new Class(parameter); 當我們建立一個

Java自動裝箱及其陷阱

          在本文中,筆者向大家介紹下Java中一個非常重要也非常有趣的特性,就是自動裝箱與拆箱,並從原始碼中解讀自動裝箱與拆箱的原理,同時這種特性也留有一個陷阱。開發者如果不注意,就會很容易跌入這個陷阱。 自動裝箱(Autoboxing) 定義        

Java進階(三十七)java 自動裝箱

  這個是jdk1.5以後才引入的新的內容。Java語言規範中說道:在許多情況下包裝與解包裝是由編譯器自行完成的(在這種情況下包裝稱為裝箱,解包裝稱為拆箱);      其實按照我自己的理解自動裝箱就可以簡單的理解為將基本資料型別封裝為物件型別,來符合Java的面向物件

JavaScript基本包裝型別(自動裝箱自動)(instanceof方法)

1)為了便於操作基本型別值,ECMAScript提供了3個特殊的引用類Boolean, Number, String每當讀取一個基本型別值的時候,後臺就會建立一個對應的基本包裝型別物件,從而可以使我們呼叫一些方法操作這些資料。 在建立變數s後(var s =

Java - 自動裝箱詳解

自動拆箱 image 實現 bubuko 自動調用 算術運算 查看 bsp sta   1、裝箱與拆箱   裝箱,將基本數據類型轉為包裝類型。拆箱,將包裝類型轉為基本數據類型。 // Byte, Short, Integer, Long, Doubl