当前位置: 代码迷 >> J2SE >> 关于ArrayList的疑义
  详细解决方案

关于ArrayList的疑义

热度:61   发布时间:2016-04-23 20:24:19.0
关于ArrayList的疑问
import java.util.*;
import java.io.*;

class Test {
public static void main(String[] args) {
ArrayList<Integer> ss = new ArrayList<Integer>();

ss.add(0);
int i = ss.get(0); //1
                int j = ss.get(0).intValue(); // 2
System.out.println(i); 
System.out.println(ss.get(0));

sum(ss);


public static void sum(ArrayList list) {
int i = list.get(0).intValue(); //3
System.out.println(i);
}
}

为什么在main函数中,1和2都对(1应该不对的),而到了另外的方法中,3就找不到符号呢???
------解决方案--------------------
1、1和2都对,int和integer之间能够自动的进行封包和拆包,这是语言本身的特性
2、3不行,是因为你的形参问题
    把 public static void sum(ArrayList list)   改成  public static void sum(ArrayList<Integer> list)  就可以了
------解决方案--------------------
形参没有用泛型。
如果形参不用泛型,可以强制类型转换。

private static void sum(ArrayList test) {
int k=((Integer) test.get(0)).intValue();
System.out.println(k);
}

------解决方案--------------------
从1.5开始Java支持自动拆箱,装箱操作
ArrayList list:可以存入任何类型的数据,默认是Object
ArrayList<Integer> list:只能存入int/Integer类型的数据,使用了泛型,表明只能存入该种类型数据
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

既然你用了泛型,那么形参也要用泛型,跟你的实参要是一样的
两者都不用泛型也是报错的呀

都不用泛型的情况下,你要在sum方法中做强转
是不是API文档中,方法前面返回值是E这种泛型的  方法,不指定的话调用的时候返回的都是Object

可以这么理解
  相关解决方案