1. 程式人生 > >包裝類(精講)---最全

包裝類(精講)---最全

(一)
/**

  • 包裝類的作用:
  •  使程式設計更加方便
    
  • @author Administrator

*/
public class Test01 {

public static void main(String[] args) {

	//呼叫方法, 只要是引用型別的資料就可以作為實參
	m1("abc"); 		//實際上是把"abc"在常量池中的引用傳遞給obj引數
	
	m1(123);		//不能把基本型別資料傳遞給obj引數
	/*
	 * 這兒沒有語法錯誤, 是因為系統把基本型別123先轉換為了對應的包裝類物件, 再把包裝類物件的引用傳遞給形參obj
	 */
}
//obj是Object型別的引用, obj引數儲存的是物件的引用(地址)
public static void m1( Object  obj) {
		
}

}

(二)
public class Application {
public static void main(String[] args) {
// SpringApplication.run(Application.class, args);
System.out.println( Integer.SIZE); //32
System.out.println( Integer.BYTES); //4
System.out.println( Integer.MIN_VALUE); //-2147483648
System.out.println( Integer.MAX_VALUE); //2147483647
System.out.println( Integer.TYPE); //int

    System.out.println( Boolean.TYPE);
    System.out.println( Boolean.TRUE);
    System.out.println( Boolean.FALSE);

    System.out.println( Double.NaN);
    System.out.println( Double.POSITIVE_INFINITY);
    System.out.println( Double.NEGATIVE_INFINITY);

    System.out.println( 10 / 0.0 ); 		//Infinity, 無窮大
    System.out.println( -10 / 0.0 ); 		//-Infinity, 負無窮大
    System.out.println( 0 / 0.0 ); 		//NaN, Not a Number
}

}
測試結果:
32
4
-2147483648
2147483647
int
boolean
true
false
NaN
Infinity
-Infinity
Infinity
-Infinity
NaN
Process finished with exit code 0
注意: System.out.println( 10 / 0 ); 輸出會報異常:Exception in thread “main” java.lang.ArithmeticException: / by zero

(三)
/**

  • 包裝類的構造方法
  •  1) 根據基本型別建立包裝類物件
    
  •  2) 根據字串 建立包裝類物件
    
  • @author Administrator

*/
public class Test02 {

public static void main(String[] args) {
	// 1) 根據基本型別建立包裝類物件
	Integer i1 = new Integer(123);
	Double dd1 = new Double(45.78);
	Boolean bb1 = new Boolean(true);

	//2) 根據字串 建立包裝類物件
	Integer i2 = new Integer("456123");
	System.out.println( i2 );
	//注意, 根據字串建立包裝類物件時, 字串要符合數字的格式

// i2 = new Integer(“adfasf”); //java.lang.NumberFormatException
// i2 = new Integer(“3.14”); // java.lang.NumberFormatException

	Double dd2 = new Double("45.78");

// dd2 = new Double(“adsf”); //java.lang.NumberFormatException:
dd2 = new Double(“456”);

	//布林型別比較特殊, 如果是"true"字串會轉換為true, 其他的字串都轉換為false
	Boolean bb2 = new Boolean("true");
	System.out.println( bb2 );
	bb2 = new Boolean("trasdfaffdue");
	System.out.println( bb2 );
	bb2 = new Boolean( null );
	System.out.println( bb2 );
}

}
輸出結果:
456123
true
false
false

Process finished with exit code 0

(四)
public class Application {
/**
* 包裝類的常用操作
* @author Administrator
*
*/

public static void main(String[] args) {
    //1)包裝類物件
    Integer i1 = new Integer(456);
    Integer i2 = new Integer("123");

    //2) 從Number繼承的方法, 可以把包裝類物件轉換為基本型別
    byte  bb = i2.byteValue();
    double dd = i1.doubleValue();
    System.out.println( bb );
    System.out.println( dd );
    bb = i1.byteValue();		//只把最後一個位元組儲存到bb變數中
    System.out.println( bb );   //-56

    //3)compareTo(Integer anotherInteger)  如果第一個物件大 返回正數, 引數物件大返回負數,相等返回0
    //Comparable<T>介面,作用是比較當前物件與引數物件的大小 , 一個類實現了該介面,需要重寫compareTo()
    //Comparable<T>介面中的<T>是泛型(把資料型別當作引數), 指定引數物件的資料型別
    //Integer物件比較大小是根據value欄位的值比較大小
    //每個包裝類都有一個value欄位, 儲存對應的基本型別的值
    System.out.println( i1.compareTo(i2) );  	//1
    Boolean b1 = new Boolean(true);
    Boolean b2 = new Boolean("afda");
    System.out.println( b1.compareTo(b2));  	//1

    //4)equals(Object obj) ,判斷兩個物件的是否相等,根據基本型別的value值判斷是否相等
    System.out.println( i1.equals(i2) );
    System.out.println( b1.equals(b2) );

    //5)parseInt(String s) 可以把字串轉換為基本型別的資料
    int xx = Integer.parseInt("7894");
    System.out.println( xx );

// xx = Integer.parseInt(“7.894”); // java.lang.NumberFormatException:
double dd3 = Double.parseDouble(“45.123”);
System.out.println(dd3);
boolean flag = Boolean.parseBoolean(“qerreqe”);
System.out.println( flag ); //false

    //6)把整數轉換為二進位制,八進位制,十六進位制
    System.out.println( Integer.toBinaryString(100));
    System.out.println( Integer.toOctalString(100));
    System.out.println( Integer.toHexString(100));

    //7)valueOf(int i) /valueOf(String s) 把基本型別/字串 轉換為包裝類物件
    i1 = Integer.valueOf( 258);
    i2 = Integer.valueOf("369");
    System.out.println(i1);
    System.out.println(i2);
    dd3 = Double.valueOf(3.14);
    dd = Double.valueOf("456.789");

}
}

輸出結果
123
456.0
-56
1
1
false
false
7894
45.123
false
1100100
144
64
258
369

Process finished with exit code 0
(五)
/**

  • int , String, Integer相互轉換
  • @author Administrator

*/
public class Test05 {

public static void main(String[] args) {
	int num = 123;
	//1) int-->String
	String text = "" + num; 		//字串與基本型別連線,先把基本型別轉換為字串再連線
									//			 "" + "123"
	text = String.valueOf(num);
	text = Integer.toString(num);
	
	//2) String --> int
	num = Integer.parseInt(text);

	//3) int --> Integer
	Integer i1 = new Integer(num);
	i1 = Integer.valueOf(num);
	i1 = num;						//Java可以自動的把基本型別轉換為包裝類物件
	
	//4) Integer--> int
	num = i1.intValue();
	num = i1;					//Java可以自動的把包裝類物件轉換為基本型別資料
	
	//5) Integer-->String
	text = i1.toString();
	 
	//6) String-->Integer
	i1 = new Integer(text);
	i1 = Integer.valueOf(text);
}

}
(六)
/**

  • 裝箱
  •  把基本型別轉換為包裝類物件
    
  • 拆箱
  •  把包裝類物件轉換為基本型別
    
  • 在Java中,可以自動的裝箱與拆箱
  • @author Administrator

*/
public class Test06 {

public static void main(String[] args) {
	Integer i1 = 456; 		//自動裝箱 
	Integer i2 = 456;		//根據基本型別456建立一個包裝類物件
	System.out.println( i1 == i2 ); 		//false 包裝類是引用型別
	System.out.println( i1.equals(i2)); 	//true

	i1 = 123;		//根據基本型別123建立一個包裝類物件
	i2 = 123;
	System.out.println( i1 == i2 ); 		//true 
	/*
	 * Java認為-128~127之間的整數是最常用的整數
	 * 在這個範圍內的整數自動裝箱後,生成的包裝類物件儲存方法區的共享池中
	 * 	i1 = 123;  會建立一個包裝類物件儲存到方法區的常量池中
	 * 	再執行i2 = 123; 時, 就直接把常量池中的包裝物件的 引用賦值給i2
	 */

	Long gg1 = 99L;
	Long gg2 = 99L;
	System.out.println( gg1 == gg2 ); 		//true
}

}