包裝類(精講)---最全
(一)
/**
- 包裝類的作用:
-
使程式設計更加方便
- @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
}
}