自動裝箱和拆箱
有時需要將int這樣的基本類型轉換為引用類型對象;
基本數據類型的自動裝箱,拆箱是J2SE 5.0提供的新功能,為打包基本數據類型提供了方便,但提供方便的同時隱藏了細節,建議在能夠區分基本數據類型與引用類型的差別時再使用;
一個自動裝箱的例子:
Integer i=10;相當於Integer i=new Integer(10);
進行編譯時,編譯器根據上下文判斷是否進行自動裝箱動作,在上例中變量i引用的是Integer類的實例;
同樣的動作適用於boolean、byte、short、char、long、float、double等基本數據類型,分別使用對應的包裝類型Boolean、Byte、Short、Character、Long、Float、Double;
J2SE 5.0中也可以自動拆箱,也就是將對象中的基本數據類型信息自動取出;
例如:
1 Integer m=10; 2 Int n=m; 3 //相當於n=m.intValue();
m變量在自動裝箱為Integer的實例後,如果被賦值給一個int類型的變量n,則會自動轉換為int類型再賦值;
在運算時,也可以進行自動裝箱和拆箱;
如:
1 Integer i=10; 2 System.out.println(i+10); 3 System.out.println(i++);
1 public class AutoBoxDemo{ 2 public static void main(String[] args){ 3 int i=10; 4 double d=10.5; 5 6 //把基本類型賦值給引用類型 7 //基本類型會在編譯時自動裝箱 8 Integer num1=i; 9 Double num2=d; 10 System.out.println(num1); 11 System.out.println(num2); 12 13 //把包裝類(引用類型)賦值給基本類型 14 //會自動做拆箱 15 int j=num1; 16 //int j=num1.intValue(); 17 double dd=num2; 18 //int dd=num2.doubleValue(); 19 System.out.println(j); 20 System.out.println(dd); 21 22 Object o=i; 23 System.out.println(o); 24 Integer b=(Integer)o; 25 System.out.println(b); 26 } 27 }
枚舉類型
1 public enum Color{ 2 RED,BLUE,BLACK,YELLOW,GREEN; 3 }
Enmu很像特殊的class,實際上enum聲明定義的類型就是一個類;
這些類都是類庫中Enum類的子類(java.lang.Enum<E>),它們繼承了Enum中許多有用的方法;
枚舉值都是public static final的,也就是常量,因此枚舉類中的枚舉值應全部大寫;
枚舉類型是class,在枚舉類型中有構造器,方法和字段,但枚舉的構造器有很大的不同;
構造器只在構造枚舉值的時候被調用;
構造器私有private,不允許有public構造器;
枚舉值可以再switch語句中使用;
1 public class EnumDemo{ 2 public static void main(String []args){ 3 System.out.println(Color.RED); 4 Color[] colors=Color.values(); 5 for(Color c:colors){ 6 System.out.println("循環:"+c); 7 } 8 9 System.out.println(Person.P1); 10 Person[] persons=Person.values(); 11 for(Person p:persons){ 12 System.out.println("循環:"+p); 13 } 14 15 Person p=Person.P3; 16 switch(p){ 17 case P1:System.out.println("switch:"+Person.P1);break; 18 case P2:System.out.println("switch:"+Person.P2);break; 19 case P3:System.out.println("switch:"+Person.P3);break; 20 } 21 } 22 } 23 24 //當jvm去加載使用枚舉類時,會預先創建多個枚舉類型的對象供外部類使用 25 //public static final Color RED=new Color(); 26 //public static final Color BLUE=new Color(); 27 //public static final Color YELLOW=new Color(); 28 enum Color{ 29 RED,BLUE,YELLOW;//枚舉類型的值必須作為第一條語句出現 30 //不能使用public 31 //調用次數與枚舉數相同 32 /*public*/ private Color(){ 33 System.out.println("構造方法"); 34 } 35 36 /*public String toString(){ 37 return "aa"; 38 }*/ 39 } 40 41 //public static final Person P1=new Person("張三",30); 42 //public static final Person P2=new Person("李四",20); 43 //public static final Person P3=new Person("王五",18); 44 enum Person{ 45 P1("張三",30),P2("李四",20),P3("王五",18); 46 private String name; 47 private int age; 48 private Person(String name,int age){ 49 this.name=name; 50 this.age=age; 51 } 52 public String toString(){ 53 return name+"--"+age; 54 } 55 }