一、包裝類
基本資料型別和包裝型別的對應關係:
二、型別轉換
裝箱:把基本型別轉換為引用型別;拆箱:引用型別轉換為基本型別
public class demo01 {
public static void main(String[] args) {
// 基本型別
int number = 10;
// 型別轉換:基本型別轉換成引用型別
Integer integer1 = Integer.valueOf(number);
System.out.println(integer1.getClass());
// 型別轉換:引用型別轉換成基本型別
int i = integer1.intValue();
System.out.println(i);
//JDK1.5之後自動裝箱、自動拆箱
int number2 = 30;
Integer integer2 = number2;
int i2 = integer2;
System.out.println(integer2.getClass());
System.out.println(i2);
}
}
parseXXX()靜態方法
XXX表示一種型別(八種基本型別),該方法可實現字串和基本型別的轉換。要注意字串轉基本型別時,boolean字串形式,只有字串為"true"時,轉換的基本型別才為true,否則為false。
public class demo02 {
public static void main(String[] args) {
// 基本型別轉字串
int num = 10;
//1.1 直接+""
String str1 = num + "";
//1.2 使用Integer中的toString()方法
String str2 = Integer.toString(num);
System.out.println(str1.getClass());
System.out.println(str2.getClass());
// 字串轉換基本型別
String str3 = "20";
//使用Integer.parseXXX()
int i1 = Integer.parseInt(str3);
System.out.println(i1);
//boolean字串形式轉成基本型別,"true"--->true, 非"true"--->false
String str4 = "true";
String str5 = "treu";
boolean b1 = Boolean.parseBoolean(str4);
boolean b2 = Boolean.parseBoolean(str5);
System.out.println(b1);
System.out.println(b2);
}
}
三、Integer緩衝區
public class demo03 {
public static void main(String[] args) {
Integer integer1 = new Integer(100);
Integer integer2 = new Integer(100);
System.out.println(integer1 == integer2); //false
Integer integer3 = 100;
Integer integer4 = 100;
System.out.println(integer3 == integer4); //true
Integer integer5 = 200;
Integer integer6 = 200;
System.out.println(integer5 == integer6); //false
}
}
"=="對基本型別比較的是值,對引用型別比較的是地址。
integer1和integer2結果為false:引用型別比較的是地址而不是值,很明顯integer1和integer2地址不同;
integer3和integer4結果為true:這裡對這兩個物件賦值採用的是java的自動裝箱,呼叫了Integer.valueOf()方法,100在cache[]的範圍內,cache[]是直接儲存在堆中的,所以可以直接取值。
integer5和integer6結果為false:雖說和”integer3和integer4“的方法是一樣的,但是因為呼叫的Integer.valueOf()方法,超過了valueOf()方法的範圍,所以就是new了一個引用,所以指向的地址就不用。
valueOf()原始碼:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
這裡low=-128,high=127,存在一個Integer型別的cache[]陣列。