深入理解自動裝箱和自動拆箱
一、什麼是自動裝箱、自動拆箱
此機制開始於jdk 1.5
java中有8種基本型別,對應8種基本型別有8個包裝類。
整形 | 實型 | 布林型 | 字元型 |
---|---|---|---|
long/int/short/byte | float/double | boolean | char |
Long/Integer/Short/Byte | Float/Double | Boolean | Character |
Integer.valueof(int i)
方法
Integer a = 1;
實際上,在編譯之後是 integer a = Integer.valueof(1)
public static Integer valueOf(int i) { /**IntegerCache.low = -128 IntegerCache.high = 127 IntegerCache 是Integer物件的快取器 */ if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
它的執行過程是這樣的:當i的值在-128到127之間時,返回的是快取器中快取的物件,否則返回的是新建立的物件。因此
Integer a = 1 ; Integer b = 1;
a==b // 結果為true,a和b都是物件,比較的是地址。
2、自動拆箱 : 在進行運算的過程中(賦值、算數、比較運算等),包裝型別的物件轉換成對應基本型別的值。底層呼叫例項方法Integer.intValue()
Integer a = new Integer(1);
int b = a;
實際上執行的是:int b = a.intValue();
public int intValue() { return value; }
3、其他
當包裝型別和基本型別進行除賦值運算之為的運算時,包裝型別自動拆箱。這容易理解,包裝型別的變數是物件的地址,是不能進行像加減乘除等運算的。
Integer a = new Integer(1);
int b = 2;
boolean bool = a < b;
實際執行: boolean bool = a.intValue() < b;
二、練習題
public void testEquals() {
int int1 = 12;
int int2 = 12;
Integer integer1 = new Integer(12);
Integer integer2 = new Integer(12);
Integer integer3 = new Integer(127);
Integer a1 = 127;
Integer a2 = 127;
Integer a = 128;
Integer b = 128;
int temp = b;
System.out.println("int1 == int2 -> " + (int1 == int2));
System.out.println("int1 == integer1 -> " + (int1 == integer1));
System.out.println("integer1 == integer2 -> " + (integer1 == integer2));
System.out.println("integer3 == a1 -> " + (integer3 == a1));
System.out.println("a1 == a2 -> " + (a1 == a2));
System.out.println("a == b -> " + (a == b));
}
相關推薦
深入理解自動裝箱和自動拆箱
一、什麼是自動裝箱、自動拆箱 此機制開始於jdk 1.5 java中有8種基本型別,對應8種基本型別有8個包裝類。 整形 實型 布林型 字元型 long/int/short/byte float/double boolean char Lon
Java語法糖(2):自動裝箱和自動拆箱
eth 空指針 lang 指針 反編譯 class path load pointer 自動拆箱和自動裝箱 Java為每種基本數據類型都提供了對應的包裝器類型。舉個例子: public class TestMain{public static void main(Strin
java基礎學習總結(十一):自動裝箱和自動拆箱
自動拆箱和自動裝箱 Java為每種基本資料型別都提供了對應的包裝器型別。舉個例子: public class TestMain { public static void main(String[] args) { Integer i = 10; } }
自動裝箱和自動拆箱(慎用“==”)
先來看一段非常“簡單”的程式碼 public static void main(String[] args) { Integer i1 = 100, i2 = 100, i3 = 130, i4 = 130; System.out.println(i1 == i2); S
Java的自動裝箱和自動拆箱(AutoBoxing,Unboxing)
java中有8中基本的資料型別,這八種基本的資料型別都有對應的封裝型別,下面是對應關係:int——Integerfloat——Floatdouble——Doublebyte——Bytelong——Longchar——Characterboolean——Booleanshort
Java 自動裝箱和自動拆箱注意的問題
自動裝箱和自動拆箱不是什麼複雜的技術,自動裝箱就是基本型別(int,long)資料可以先自動轉換為對應的封裝類(Integer,Long)物件,而自動拆箱相反。 在本文中,筆者向大家介紹下Java中一個非常重要也非常有趣的特性,就是自動裝箱與拆箱,並從原
JavaScript基本包裝型別(自動裝箱和自動拆箱)(instanceof方法)
1)為了便於操作基本型別值,ECMAScript提供了3個特殊的引用類Boolean, Number, String每當讀取一個基本型別值的時候,後臺就會建立一個對應的基本包裝型別物件,從而可以使我們呼叫一些方法操作這些資料。 在建立變數s後(var s =
全面理解java自動裝箱和拆箱(轉)
sam eva android 之間 對象類型 output 壓力 有一個 sla 自動裝箱和拆箱從Java 1.5開始引入,目的是將原始類型值轉自動地轉換成對應的對象。自動裝箱與拆箱的機制可以讓我們在Java的變量賦值或者是方法調用等情況下使用原始類型或者對象類型更
自動裝箱和拆箱的原理
port post csdn com details www. www art .com http://blog.csdn.net/jairuschan/article/details/7513045 http://www.importnew.com/15712.html自
自動裝箱和拆箱的幾個細節
是不是 返回 之間 println 實例 eof == 常開 equal 裝箱和拆箱 裝箱和拆箱也比較簡單,我就不解釋了,直接看代碼就行了。 Integer box = 2; // 自動裝箱 System.out.println(box); // 自動拆箱 雖然裝箱拆箱簡單
淺析Java自動裝箱和拆箱
最近在面試的時候,面試官提了一個很有趣的問題,如果這樣定義: int a = 1; Integer b = 1;你覺得a ==b?還是怎麼樣?如果換成1000呢? 當時我沒有回答的出來,按照常規的思維,我覺得Integer是一個物件,int乃是基本的
Java基礎-----JDK1.5的新特性自動裝箱和拆箱
JDK1.5的新特性 1、自動裝箱:把基本型別轉換為包裝類型別。 2、自動拆箱:把包裝類型別轉換為基本型別。 注意:在使用,Integer x = null;程式碼就會出現NullPointerException。 package StringBufferPac
常見物件------JDK5的新特性自動裝箱和拆箱
1.JDK5的新特性 * 自動裝箱:把基本型別轉換為包裝類型別 * 自動拆箱:把包裝類型別轉換為基本型別 2.示例 * JDK5的新特性自動裝箱和拆箱 * Integer ii = 100; * ii += 200;3.注意事
Java 自動裝箱和拆箱
裝箱就是自動將基本資料型別轉換為包裝器型別;拆箱就是自動將包裝器型別轉換為基本資料型別。 能進行裝箱與拆箱的基本型別和對應的包裝型別如下: 自動裝箱與拆箱示例程式碼: public class Tes
JAVA——包裝類的自動裝箱和拆箱
關於JAVA的包裝類自動拆箱和裝箱,有很多人做過介紹,但筆者發現說的不夠簡潔,而這個問題在面試、筆試中又經常涉及,故筆者將蒐集到的資訊與大家分享下: 包裝類(原始型別對應的類,即Boolean, By
自動裝箱和拆箱(包裝和解包)
自動裝箱:就是把基礎資料型別自動封裝並轉換成對應的包裝類的對象。 拆 箱 :就是把包裝類的物件自動解包並轉換成對應的基礎資料型別。 public class BoxDemo { public static void main(String[] args) {
[每日一問]---Java中支援的資料型別有哪些?什麼是自動裝箱和拆箱?
Java支援的資料型別包括兩種:基本資料型別、引用型別 1)基本資料型別有8種: byte、short、int、long、float、double、boolean、char 2)引用型別: 如S
java自動裝箱、自動拆箱和正常情況效能比較
自動裝箱和自動拆箱是java5.0版本引入的,能自動將基本型別轉換為對應的基本型別包裝物件,那麼我們比較一下他們的效能情況。 package com.wmmad.test; import junit.framework.TestCase; /** * @author ma
Integer自動裝箱和拆箱和比較
一、int 和Integer比較。不管Integer是直接等於一個數值,還是=new Integer(xxx);都是Integer拆箱成int,再去和前面那個int數值比較。 二、Integer和Integer比較,存在三種情況。 a.它們兩個都是直接等於一個數值, 那麼
包裝類自動裝箱和拆箱原理
包裝類的自動裝箱和自動拆箱 包裝類的自動裝箱和拆箱是JDK1.5的新特性 一.首先:瞭解自動裝箱的過程 有兩種自動裝箱過程 第一種 (-128~127)之內 呼叫相應包裝類的valueOf() 例如:Integer i = 12;