一、 包裝類的使用
- 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/143904.html
標籤:Java
上一篇:Java常用類-Object類
