1 自动打包和解包(boxing/unboxing)
提供基本数据类型和他们对应的外覆类的自动转换
举例来说:在jdk1.5以前,对于Map中元素的存储和取得都是通过Object来进行,不能直接通过基本数据类型
jdk1.5以前的写法:
Map map = new HashMap();
map.put("No1", new Integer(1));
int i = (Integer)map.get("No1").intValue();
jdk1.5的写法:
Map map = new HashMap();
map.put("No1", 1);
int i = (Integer)map.get("No1");
2 泛型----一般在定义容器的时候使用
在jdk1.5以前,容器中只能装Object类型的元素,所以不论什么类型的元素,如果放到容器中,都会失去他们自己的类型,取出来的时候,需要强制转换为他们自己的具体类型,很麻烦。
但是jdk1.5解决了这样的问题,通过泛型强制指定该容器只能放某种具体类型的元素,所以,在取出元素的时候,就不需要强制类型转换了。
例如:
jdk1.5以前的写法:取出容器中元素的时候,必须进行强制类型转换
List list = new ArrayList();
list.add("aaa1");
list.add("aaa2");
list.add("aaa3");
for (int i = 0; i < list.size(); i++) {
System.out.println((String) list.get(i));
}
jdk1.5的写法:取出容器中元素的时候,不必进行强制类型转换
List<String> list = new ArrayList<String>();
list.add("aaa1");
list.add("aaa2");
list.add("aaa3");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
注意:什么样的类可以指定<String>这样的东西呢?
类似于:public class ArrayList<E> extends AbstractList<E> implements List<E>
这种定义的类/接口就可以
当然,也可以指定多个,例如:
public interface Map<K,V>,就可以这样指定:
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("No1", 1);
int i = map.get("No1");
3 对于容器的For循环---简便型(遍历数组和容器)
int[] arr = {1,2,3,4,5,6};
for (int c : arr){
System.out.println(c);
}
或者
String[] arr = {"No1", "No2", "No3", "No4", "No5"};
for (String c : arr){
System.out.println(c)
}
或者
List list = new ArrayList();
list.add("No1");
list.add("No2");
list.add("No3");
for (Object c : list){
System.out.println((String)c);
}