范型中,List<String> l = new ArrayList<String>();
其中List<String> l决定了l只能接受String类型的参数,那么ArrayList<String>()代表了什么?我们知道new ArrayList默认初始化10个长度的Object数组,难道new ArrayList<String>()就初始化10个长度的String[]?可是运行如下代码: List l = new ArrayList<String>();
l.add(new Integer(1));
System.out.println(l.get(0)); 程序能照常运行,说明l对象里没有实例化一个10个长度的String[],否则会报类型不匹配的错误,那ArrayList<String>()代表了什么?
其中List<String> l决定了l只能接受String类型的参数,那么ArrayList<String>()代表了什么?我们知道new ArrayList默认初始化10个长度的Object数组,难道new ArrayList<String>()就初始化10个长度的String[]?可是运行如下代码: List l = new ArrayList<String>();
l.add(new Integer(1));
System.out.println(l.get(0)); 程序能照常运行,说明l对象里没有实例化一个10个长度的String[],否则会报类型不匹配的错误,那ArrayList<String>()代表了什么?
解决方案 »
- java中的this造成StackOverflowError
- 关于使用JDBC 同时能连接sqlserver 7.0 和 sqlserver 2000问题。谢谢。
- StringBuffer的应用问题??
- 有没有什么方法A字符串包包含B字符串 啊
- C-S结构 怎么传对象信息?
- 使用DefaultTableModel的错误?
- 如何获得任意类的绝对路径?
- javax.jdo.* 到底在哪个包里面啊?找了一整天了!
- message 和 interface 之间有何区别?
- 菜鸟我要提问了。关于编译的问题
- HTTP Status 500错误,找不到Servlet类
- java中的list可以进行相加么----在线等
List l = new ArrayList <String>(); 实际上就变成了 List l = new ArrayList <Object>();
个人认为泛型的主要功能就是:由于在编译时就定义类型,从而减少了在运行期间的错误.
List<String> l 有意义,但是new ArrayList<String>()加不加范型没区别
并没有初始化String[], 初始化的仍然是Object[]ArrayList类的初始化代码如下:
private E[] elementData;
......
this.elementData = (E[])new Object[initialCapacity];
虽然做了类型转换,实际仍然是Object[]型的
但一不能说ArrayList<String>是完全无意义的,加泛型<String>就是为了避免在运行期间减少类型不匹配的错误.
List<String> l = new ArrayList();
也能通过编译,但会有warning.和使用List l = new ArrayList()没什么区别,这样就失去了使用List<String>的意义.
ArrayList<String> list = new ArrayList<String>();
// list.put(1);//ERROR
list.put("hello");
String s = list.get(0); //不需要再做类型转换
详见Thinking in java泛型一章的总结,是作者对泛型的思考。
new了一个ArrayList<String>对象 给了个List类型引用
ArrayList的add方法源码
public boolean add(E o) {
ensureCapacity(size + 1); // Increments modCount!!
elementData[size++] = o;
return true;
}
list的<E>是没有赋值的应该是转成Object了.
对于你自己定义的对象,就可以省略强制转换的写法。