一、 包裝類的使用 java提供了8種基本數據類型對應的包裝類,使得基本數據類型的變數具有類的特征 需要掌握的:基本數據類型、包裝類、String三者之間的相互轉換 基本數據類型 《 》包裝類:自動裝箱,自動拆箱 基本數據類型、包裝類 >String類型:調用String重載的valueOf(Xxx ...
一、 包裝類的使用
- java提供了8種基本數據類型對應的包裝類,使得基本數據類型的變數具有類的特征
- 需要掌握的:基本數據類型、包裝類、String三者之間的相互轉換
- 基本數據類型 《---------------》包裝類:自動裝箱,自動拆箱
- 基本數據類型、包裝類--->String類型:調用String重載的valueOf(Xxx xxx)
- String類型 --->基本數據類型、包裝類:調用包裝類的parseXxx(String s)
import org.junit.Test;
public class WrapperTest {
//String類型 --->基本數據類型、包裝類:調用包裝類的parseXxx(String s)
@Test
public void test5(){
String str1 = "123";
//錯誤的情況:
// int num1 = (int)str1;
// Integer in1 = (Integer)str1;
//可能會報NumberFormatException
int num2 = Integer.parseInt(str1);
System.out.println(num2 + 1);
String str2 = "true1";
boolean b1 = Boolean.parseBoolean(str2);
System.out.println(b1);
}
//基本數據類型、包裝類--->String類型:調用String重載的valueOf(Xxx xxx)
@Test
public void test4(){
int num1 = 10;
//方式1:連接運算
String str1 = num1 + "";
//方式2:調用String的valueOf(Xxx xxx)
float f1 = 12.3f;
String str2 = String.valueOf(f1);//"12.3"
Double d1 = new Double(12.4);
String str3 = String.valueOf(d1);
System.out.println(str2);
System.out.println(str3);//"12.4"
}
/*
* JDK 5.0 新特性:自動裝箱 與自動拆箱
*/
@Test
public void test3(){
// int num1 = 10;
// //基本數據類型-->包裝類的對象
// method(num1);
//自動裝箱:基本數據類型 --->包裝類
int num2 = 10;
Integer in1 = num2;//自動裝箱
boolean b1 = true;
Boolean b2 = b1;//自動裝箱
//自動拆箱:包裝類--->基本數據類型
System.out.println(in1.toString());
int num3 = in1;//自動拆箱
}
public void method(Object obj){
System.out.println(obj);
}
//包裝類--->基本數據類型:調用包裝類Xxx的xxxValue()
@Test
public void test2(){
Integer in1 = new Integer(12);
int i1 = in1.intValue();
System.out.println(i1 + 1);
Float f1 = new Float(12.3);
float f2 = f1.floatValue();
System.out.println(f2 + 1);
}
//基本數據類型 --->包裝類:調用包裝類的構造器
@Test
public void test1(){
int num1 = 10;
// System.out.println(num1.toString());
Integer in1 = new Integer(num1);
System.out.println(in1.toString());
Integer in2 = new Integer("123");
System.out.println(in2.toString());
//報異常
// Integer in3 = new Integer("123abc");
// System.out.println(in3.toString());
Float f1 = new Float(12.3f);
Float f2 = new Float("12.3");
System.out.println(f1);
System.out.println(f2);
Boolean b1 = new Boolean(true);
Boolean b2 = new Boolean("TrUe");
System.out.println(b2);
Boolean b3 = new Boolean("true123");
System.out.println(b3);//false
Order order = new Order();
System.out.println(order.isMale);//false
System.out.println(order.isFemale);//null
}
}
class Order{
boolean isMale;
Boolean isFemale;
}
二、問題
public void test() {
Object o1 = true ? new Integer(1) : new Double(2.0);
//預設調用toString方法
System.out.println(o1);//1.0
System.out.println(o1.toString());// 1.0
}
/*三目運算符比較基本數據類型,所以在編譯階段自動拆箱為 int 和 double 類型,由於三目運算符要求 表達式2 和 表達式3 類型一致,所以在編譯階段自動類型提升(即 int 自動類型轉換為 double 類型),再自動裝箱為Object,輸出時使用多態調用重寫的toString();即Double包裝類的toString();
其實這裡麵包含一個三元一次運算符和一個賦值運算,因為三目運算符的優先順序高於賦值運算符,所以先運行三目運算符
*/
@Test
public void test3() {
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j);//false
//Integer內部定義了IntegerCache結構,IntegerCache中定義了Integer[],
//保存了從-128~127範圍的整數。如果我們使用自動裝箱的方式,給Integer賦值的範圍在
//-128~127範圍內時,可以直接使用數組中的元素,不用再去new了。目的:提高效率
Integer m = 1;
Integer n = 1;
System.out.println(m == n);//true
Integer x = 128;//相當於new了一個Integer對象
Integer y = 128;//相當於new了一個Integer對象
System.out.println(x == y);//false