java裝箱
A. 什麼是java中的自動裝箱和自動拆箱
java自動裝箱和拆箱
基本數據類型,如int,float,double,boolean,char,byte,不具備對象的特徵,不能調用方法。
裝箱:將基本類型轉換成包裝類對象
int i=10;
Integer x=new Integer(i);手動裝箱
Integer y=10;自動裝箱
拆箱:將包裝類對象轉換成基本類型的值
Integer j=new Integer(8);
int m=j.intValue();//手動拆箱
int n=j;//自動拆箱
java為什麼要引入自動裝箱和拆箱的功能?又是怎麼實現的呢?
主要是用於java集合中,List<Inteter> list=new ArrayList<Integer>();
list集合如果要放整數的話,只能放對象,不能放基本類型,因此需要將整數自動裝箱成對象。
實現原理:javac編譯器的語法糖
public class Main {
public static void main(String[] args) {
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i1==i2);
System.out.println(i3==i4);
}
}
//結果為:true false
在通過Integer.valueOf()方法創建Integer對象的時候,如果數值在[-128,127]之間,便返回指向IntegerCache.cache中已經存在的對象的引用(位於堆對象池中);否則創建一個新的Integer對象(創建在java堆中)。上面的代碼中i1和i2的數值為100,因此會直接從cache中取已經存在的對象,所以i1和i2指向的是同一個對象,而i3和i4則是分別指向不同的對象。
public class Main {
public static void main(String[] args) {
Double i1 = 100.0;
Double i2 = 100.0;
Double i3 = 200.0;
Double i4 = 200.0;
System.out.println(i1==i2);
System.out.println(i3==i4);
}
}
//結果為:false false
為什麼Double類的valueOf方法會採用與Integer類的valueOf方法不同的實現呢?很簡單:在某個范圍內的整型數值的個數是有限的,而浮點數卻不是。
public class Main {
public static void main(String[] args) {
Boolean i1 = false;
Boolean i2 = false;
Boolean i3 = true;
Boolean i4 = true;
System.out.println(i1==i2);
System.out.println(i3==i4);
}
}
//結果為:true true
至於為什麼是這個結果,同樣地,看了Boolean類的源碼也會一目瞭然。下面是Boolean的valueOf方法的具體實現:
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
public class H {
public static void main(String[] args) {
Integer m=10;
int n=10;
System.out.println(m==n);
}
}
//結果為:true
B. Java運行時常量池是什麼
運行時常量池是每個類常量池的運行時代表。它包含了類的運行時常量和靜態方法。運行時常量池是方法區的一部分。
C. java 什麼是拆箱和裝箱,拆箱和裝箱 嘛用啊
詳解Java的自動裝箱與拆箱(Autoboxing and unboxing)
一、什麼是自動裝箱拆箱
很簡單,下面兩句代碼就可以看到裝箱和拆箱過程
//自動裝箱
Integertotal=99;
//自定拆箱
inttotalprim=total;
簡單一點說,裝箱就是自動將基本數據類型轉換為包裝器類型;拆箱就是自動將包裝器類型轉換為基本數據類型。
下面我們來看看需要裝箱拆箱的類型有哪些:
我有一個微信公眾號,經常會分享一些Java技術相關的干貨文章,還有一些學習資源。
如果你需要的話,可以用微信搜索「Java團長」或者「javatuanzhang」關注。
D. java 為什麼要有裝箱和拆箱
把一個基本類型包裝成一個類,一個是可以使這個類型具有很多可以調用的方法。二個是Java向面像對象語言的靠近。其實Java還不算是很純的面向對象的語言。真正的面向對象,是沒有基本數據類型的。它只有一種類型,就是對象。三個是在泛型中,基本類型是不可以做泛型參數的。如:List <int> list = new ArrayList<int> ();這是不合法的。你只能這個樣寫List<Integer> list = new ArrayList<Integer> ();也就是要用int型的包裝類類型來解決基本類型不可以做泛型參數的問題 。
一名話,包裝類有更多的方法和用途, 而這是基本類型沒有的!!!
E. 什麼是java的自動包裝功能
這里的裝箱應該理解為 封裝對象 ,即把基礎數據類型(如 int)轉換成基礎類型封裝類的對象(如 new Integer())
拆箱就是裝箱的反過程,即把基礎類型封裝類的對象(如 new Integer())轉換為基礎數據類型(如 int)。
裝箱: Integer a = new Integer() ;
a = 100 ; //1.5以前不支持為對象如此賦值
拆箱: int b = new Integer(100) ;