Java基礎——包裝類

包裝類

1. 包裝類的使用:

Java提供了8種基本數據類型對應的包裝類,使得基本數據類型的變量具有類的特徵
在這裏插入圖片描述


2. 基本數據類型、包裝類、String三者之間的相互轉換

在這裏插入圖片描述
注:【實際上JDK5.0以後有了自動裝箱、自動拆箱功能後,基本數據類型和包裝類可以合二爲一,二者在實際開發過程中可以看作是一種東西】

實例:

import java.util.Scanner;
import java.util.Vector;
import org.junit.Test;


/*
 * 包裝類的使用:
 * 
 * 1. Java提供了8種基本數據類型對應的包裝類,使得基本數據類型的變量具有類的特徵
 * 
 * 2. 基本數據類型、包裝類、String三者之間的相互轉換
 */
public class WrapperTest {
	//基本數據類型--->包裝類:調用包裝類的構造器
	//【有些方法的形參是引用類型,比如Object類型,就需要把基本數據類型轉化爲包裝類,再傳參】
	@Test
	public void test1(){
		int num1 = 10;
		Integer in1 = new Integer(num1);
		System.out.println(in1.toString());
		
		Integer in2 = new Integer("234"); //注意,該字符串內容必須是純粹的數,不能是"123abc"
		System.out.println(in2.toString());
		
		Boolean b1 = new Boolean(true);
		Boolean b2 = new Boolean("true");
		Boolean b3 = new Boolean("true123"); //這裏不同於其他類型,不報異常,而是輸出false
		System.out.println(b3);
	}

	@Test
	public void test2(){
		Integer in1 = new Integer(10);
		int num1 = in1.intValue();
		System.out.println(num1 + 1);
		
		Boolean b1 = new Boolean(true);
		boolean flag = b1.booleanValue();
		System.out.println(flag);
	}

	//JDK5.0新增新特性:自動裝箱與自動拆箱
	//【包裝類和基本數據類型之間的轉換,十分常用,因此增加自動裝箱拆箱,使得二者的轉化過程更加平滑(隱藏了複雜過程)】
	//【有了自動裝箱與拆箱技術後,基本數據類型 和 包裝類 就可以看成一個東西了】
	@Test
	public void test3(){
		//自動裝箱:基本數據類型--->包裝類
		int num1 = 10;
		Integer in1 = num1;
		
		boolean b1 = true;
		Boolean flag = b1;
		
		//自動拆箱:包裝類--->基本數據類型
		int num2 = in1;
	}

	//基本數據類型、包裝類--->String類型:調用String中重載的valueOf(Xxx xxx)方法
	//【轉化成誰,就去誰裏面找方法】
	@Test
	public void test4(){
		//方式一:連接運算
		int num1 = 10;
		String str1 = num1 + "";
		
		//方式二:調用String的valueOf()方法
		float f1 = 12.3F;
		String str2 = String.valueOf(f1); //"12.3"
		
		Double d1 = new Double(22.4);
		String str3 = String.valueOf(d1); //"22.4"
	}
	//包裝類--->基本數據類型:調用包裝類的xxxValue
	//【包裝類作爲引用類型,是不能進行加減乘除運算的,因此需要轉化回基本數據類型,才能運算】

	//String類型--->基本數據類型、包裝類:調用包裝類的parseXxx()方法
	@Test
	public void test5(){
		String str1 = "123";
		int num1 = Integer.valueOf(str1);
		
		int num2 = Integer.parseInt(str1);
		
		String str2 = "true";
		boolean b1 = Boolean.parseBoolean(str2);
		System.out.println(b1);
	}
}

3. 面試題

知識點:

  • 包裝類 Integer 內部定義了IntegerCache結構,其中定義了一個Integer[]數組,保存了常用的整數[-128, 127],方便使用,(因爲很常用,所以就別每次新創建、銷燬這麼麻煩了,提前加載好就是);
  • 因此,如果我們使用自動裝箱的方式(即,不是new的),給Integer賦值的範圍在-128~127範圍內,就可以直接使用數組中的元素,不用再new了;超出這個範圍的數,則按正常流程去new一個Integer對象;
//面試題:
@Test
public void interviewTest(){
	//面試題1:
	Object o1 = true ? new Integer(1) : new Double(2.0);
	System.out.println(o1); //1.0
	//【三目運算符,在編譯的時候,就要對前後兩個變量進行類型統一,就會進行類型提升】
	
	Object o2;
	if(true){
		o2 = new Integer(1);
	}else{
		o2 = new Double(2.0);
	}
	System.out.println(o2);
	
	//面試題2:
	Integer in1 = 1;
	Integer in2 = 1;
	Integer a = 128;
	Integer b = 128;
	System.out.println(in1 == in2); //true
	System.out.println(a == b); //false
	//Integer內部定義了IntegerCache結構,其中定義了一個Integer[]數組,保存了常用的整數[-128, 127],方便使用
	//(因爲很常用,所以就別每次新創建、銷燬這麼麻煩了,提前加載好就是)
	//因此,如果我們使用自動裝箱的方式(即,不是new的),給Integer賦值的範圍在-128~127範圍內,就可以直接使用數組中的元素,不用再new了
	//超出這個範圍的數,則按正常流程去new一個Integer對象
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章