A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public static void main(String[] args) {
                ArrayList collection=new ArrayList();
                collection.add(1);
                collection.add(1L);
                collection.add("abc");
                //这句为什么错的!看不懂!求助!
                int i=(int) collection.get(0);
                System.out.println(i);
        }

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1

查看全部评分

10 个回复

倒序浏览
get(0)是可以的怎么会有错  get(1)和get(2)就错了
回复 使用道具 举报
集合中存放的是对象的引用,不能存基本类型~ add(1) , 其实是将基本类型int 自动装箱为Integer后再存入到集合的,所以在强转的时候也需要用Integer转。 输入的时候会自动拆箱。
PS:强转之前最好做一个 instanceof 的类型判断。

  1. public static void main(String[] args) {
  2.                 // TODO Auto-generated method stub
  3.                 ArrayList collection=new ArrayList();
  4.         collection.add(123);
  5.         collection.add(1L);
  6.         collection.add("abc");
  7.         //集合中存的是对象的引用,不是基本数据类型,所以0角标的元素是Integer,
  8.         //int的包装类,要强转也是用Integer转,不能用int
  9.         if(collection.get(0) instanceof Integer)
  10.                 {
  11.                         Integer i=(Integer) collection.get(0);
  12.                         System.out.println(i);
  13.                 }
  14.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1

查看全部评分

回复 使用道具 举报
我这里没有错,可以正常输出。
回复 使用道具 举报
水竹 发表于 2014-10-4 14:22
我这里没有错,可以正常输出。

不可能你转成用的是基本数据类型吗?还是Integer,我感觉集合中也应该存的是对象
回复 使用道具 举报
没有错 但如果是get(1)或get(2)就会出错 编译时除了会报可能存在安全问题外 没别的问题 一样能运行
回复 使用道具 举报
水竹 中级黑马 2014-10-4 16:43:25
7#
张业婷 发表于 2014-10-4 16:17
不可能你转成用的是基本数据类型吗?还是Integer,我感觉集合中也应该存的是对象 ...

你的main方法我没改动,直接放在类里面就可以正常运行。
也许是因为我用的jdk8.0的缘故?或许有什么地方不一样?
回复 使用道具 举报
郑飞 高级黑马 2014-10-4 20:30:31
8#
  1.         public static void main(String[] args) {
  2.         ArrayList collection=new ArrayList();
  3.         collection.add(1);
  4.         collection.add(1L);
  5.         collection.add("abc");
  6.         //ArrayList 取出的是Object,所以不能交给int. 你可以转成Integer,然后丢给int(涉及自动拆动作)
  7.         int i=(Integer) collection.get(0);
  8.         System.out.println(i);
  9. }
复制代码
回复 使用道具 举报
水竹 发表于 2014-10-4 16:43
你的main方法我没改动,直接放在类里面就可以正常运行。
也许是因为我用的jdk8.0的缘故?或许有什么地方 ...

我用8.0的运行也没错,结果是1,建议用泛型这句话是对楼主的建议:lol
回复 使用道具 举报
我运行没有报错,也是8.0。
import java.util.ArrayList;
class CollectionTest
{
        public static void main(String[] args)
        {
                ArrayList collection=new ArrayList();
                collection.add(1);
                collection.add(1L);
                collection.add("abc");
                int i=(int) collection.get(0);
                System.out.println(i);
    }
}
回复 使用道具 举报
楼上回答的很全面,集合存储的是对象,基本类型数据会自动装箱,所以int会变为Integer
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马