Java中的8個(gè)基本類(lèi)型都對(duì)應(yīng)一個(gè)包裝類(lèi)
byte → Byte
short → Short
int → Integer
long?→ Long
float → Float
double → Double
char → Character
boolean→ Boolean
每個(gè)包裝類(lèi)中都有一個(gè)靜態(tài)的方法來(lái)將java的基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換為包裝類(lèi),這個(gè)靜態(tài)方法接受一個(gè)對(duì)應(yīng)的基本類(lèi)型參數(shù)然后返回一個(gè)包裝類(lèi)的引用:
Java 1.5版本之后 增加了自動(dòng)裝箱、拆箱機(jī)制,提供基本數(shù)據(jù)類(lèi)型和包裝類(lèi)型的相互轉(zhuǎn)換操作。
自動(dòng)裝箱即自動(dòng)將基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換成包裝類(lèi)型:
public class TestUtil { public static void main(String[] args){ //JDK1.5之前 不可以自動(dòng)裝箱 Integer i1 = new Integer(100); Integer i2 = Integer.valueOf(100); //1.5之后 可以自動(dòng)裝箱 Integer i3 = 100;
//原理 ?Integer i3 = Integer.valueOf((int)100); System.out.println(i1); System.out.println(i2); System.out.println(i3); }}
自動(dòng)拆箱即自動(dòng)將包裝類(lèi)型轉(zhuǎn)換成基本數(shù)據(jù)類(lèi)型,與自動(dòng)裝箱相反:
public class TestUtil { public static void main(String[] args){ //JDK1.5之前 不可以自動(dòng)裝箱 Integer i1 = new Integer(100); Integer i2 = Integer.valueOf(100); //1.5之后 可以自動(dòng)裝箱 Integer i3 = 100; //自動(dòng)拆箱 int i4 = i1; //自動(dòng)拆箱的原理 調(diào)用intValue int i5 = i1.intValue(); System.out.println(i4); System.out.println(i5); }}輸出結(jié)果100100
public class TestUtil { public static void main(String[] args){ //將數(shù)字字符串轉(zhuǎn)換為int類(lèi)型數(shù)字 //將String直接轉(zhuǎn)換為int類(lèi)型 int value1 = Integer.parseInt("123"); //先將String構(gòu)成一個(gè)Integer對(duì)象,然后拆分 int value2 = new Integer("123"); System.out.println(value1); System.out.println(value2); }}輸出結(jié)果:123123
筆試題
public class TestUtil { public static void main(String[] args){ //將數(shù)字字符串轉(zhuǎn)換為int類(lèi)型數(shù)字 Integer i1 = 10;//10自動(dòng)包裝成Integer對(duì)象 不是常量區(qū)的10,而是存放在靜態(tài)元素區(qū)的10 Integer i2 = 10;//與i1同時(shí)指向靜態(tài)元素區(qū)的10 Integer i3 = new Integer(10);// 新new 的一個(gè)對(duì)象 10 Integer i4 = new Integer(10);//再new一個(gè) System.out.println(i1 == i2);//== 比較變量里的內(nèi)容(地址) System.out.println(i1 == i3); System.out.println(i3 == i4); System.out.println(i1.equals(i2));//重寫(xiě)了 比值, 不是Object里的equals , System.out.println(i1.equals(i3)); System.out.println(i2.equals(i4)); }}輸出結(jié)果:truefalsefalsetruetruetrue
1.==與equals()區(qū)別
?? ==可以比較基本數(shù)據(jù)類(lèi)型? 也可以比較引用數(shù)據(jù)類(lèi)型? (變量中存儲(chǔ)的內(nèi)容)
?? 如果比較基本類(lèi)型比較是變量中存儲(chǔ)的值
?? 如果比較引用類(lèi)型比較是變量中存儲(chǔ)的地址引用
?? equals()是Object類(lèi)中繼承過(guò)來(lái)的方法? 每一個(gè)引用類(lèi)型都可以調(diào)用
?? 默認(rèn)繼承的equals()方法比較與==一致? 如果想要改變比較規(guī)則 可以重寫(xiě)equals方法
?? 由于Integer類(lèi)就重寫(xiě)了equals() 所以Integer比較的是數(shù)值
??2.考察Integer類(lèi)加載的時(shí)候? 自己有一個(gè)靜態(tài)的空間
?? 空間內(nèi)立即加載 Integer類(lèi)型的數(shù)組? 內(nèi)存儲(chǔ)256個(gè)Integer對(duì)象?? -128 ~ 127
? ?如果我們用的對(duì)象范圍在這之內(nèi)Integer i1 = 10;? 直接取靜態(tài)區(qū)中找對(duì)應(yīng)的對(duì)象
? ?如果我們用的對(duì)象范圍超出了這個(gè)Integer i1 = 1000;? 會(huì)幫我們創(chuàng)建一個(gè)新的Integer對(duì)象
?
來(lái)源:https://www.icode9.com/content-1-316151.html聯(lián)系客服