天天看點

JAVA---包裝類包裝類

包裝類

          java語言是面向對象的語言,而基本資料類型的資料不是對象,但是有的時候我們

          需要研究使用基本資料類型的資料,需要将之轉換成對象來使用,這個時候我們可

          以将基本資料類型包裝成引用類型。

每一個基本資料類型都對應一個包裝類:

     byte----->Byte

     short---->Short

     int------>Integer

     long----->Long

     float---->Float

     double--->Double

     char----->Character

     boolean-->Boolean

特點:

    (1)都是final修飾的

    (2)一經建立的對象裡的資料不可變

    (3)Character和Boolean的父類是Object,其他六種的父類是Number類型

      (Number是抽象類)

Integer:    

常用構造器:

     Integer(int value)

          通過指定的基本資料類型的資料建構一個Integer對象

     Integer(String str)

          通過指定的字元串的資料建構一個Integer對象

常用方法:

      int intValue();

            作用是将包裝類的對象拆箱成基本資料類型

      static int parseInt(String s)

            作用是将字元串轉換成10進制的基本資料類型

      static Integer valueof(String s)

            作用是将字元串轉成Integer對象

JDK1.5以後支援自動裝箱和拆箱(reg:TextBox1)  

/**
 * jdk1.5以後支援自動裝箱和拆箱 
 * */
public class TextBox1 {
	public static void main(String[] args) {
		/*
		 * 發生了自動裝箱操作,相當于調用了Integer.valueOf(5)
		 * 5被包裝成對象,存在堆中。将位址值給了變量i
		 * */
		Integer i = 5;
		/*
		 * 發生了自動拆箱操作,相當于i.intValue()
		 * 對象i被拆箱成基本資料類型5存儲在num空間裡 
		 */
		int num = i;
		/*
		 *任何引用資料類型的變量不可以進行運算。
		 *除了字元串拼接 
		 */
		Integer n1 = new Integer(10);
		Integer n2 = new Integer(20);
		Integer n3 = n1+n2;
		/*
		 * n1發生了自動拆箱,即n1.intValue(),變成基本資料類型
		 *n2發生了自動拆箱,即n2.intValue(),變成基本資料類型
		 *然後進行運算,結果為基本資料類型的30
		 *30自動裝箱,底層調用Integer.valueOf(30),
		 *變成對象n3
		 */
		System.out.println(n3);
	}

}
           

包裝類的常量池

基本資料類型的包裝類除了浮點數類型都有自己的常量池。當将基本資料類型進行自動裝箱時,裝箱後的對象的字面值,如果是在 -128~127會存儲在常量池中,會先檢查常量池中是否有相同字面值的對象,如果有,則将常量池的位址給引用變量。
public class Text02 {
	public static void main(String[] args) {
		Integer i1 = new Integer(100);
		Integer i2 = new Integer(100);
		System.out.println(i1 == i2);// false,不是自動裝箱時資料不是存在常量池中
		// 測試自動裝箱
		Integer i3 = 100;// 100裝箱後變成對象,存入常量池中
		Integer i4 = 100;
		/*
		 * 100裝箱後,去常量池中查找是否有相同值的對象,發現存在 就将常量池中的i3值給了i4
		 */

		System.out.println(i3 == i4);
		Byte i5 = 100;
		Byte i6 = 100;
		System.out.println(i5 == i6);
		/*
		 * 整數的包裝類 Byte,Short,Integer,Long都有自己的常量池(字面量-128~127)
		 * Character也有自己的常量池: '\u0000'~'\u007f'
		 * 
		 * Boolean也有常量池
		 * 
		 * 浮點數類型的包裝類沒有常量池
		 */
		System.out.println(i5 == (Number) i3);// Byte和Integer的父類是Number,用Number進行強轉

		Character c1 = (char) (-1);
		Character c2 = (char) (-1);
		System.out.println(c1 == c2);

		Boolean f = true;
		Boolean f1 = true;
		System.out.println(f == f1);

	}

}