黑马程序员技术交流社区

标题: 类型转的问题,我感觉没错啊!为什么错了? [打印本页]

作者: 张业婷    时间: 2014-10-4 14:01
标题: 类型转的问题,我感觉没错啊!为什么错了?
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);
        }
作者: 在学野马    时间: 2014-10-4 14:09
get(0)是可以的怎么会有错  get(1)和get(2)就错了
作者: JerryJava    时间: 2014-10-4 14:15
集合中存放的是对象的引用,不能存基本类型~ 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.         }
复制代码

作者: 水竹    时间: 2014-10-4 14:22
我这里没有错,可以正常输出。
作者: 张业婷    时间: 2014-10-4 16:17
水竹 发表于 2014-10-4 14:22
我这里没有错,可以正常输出。

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

你的main方法我没改动,直接放在类里面就可以正常运行。
也许是因为我用的jdk8.0的缘故?或许有什么地方不一样?
作者: 郑飞    时间: 2014-10-4 20:30
  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. }
复制代码

作者: liuxiang    时间: 2014-10-4 21:25
水竹 发表于 2014-10-4 16:43
你的main方法我没改动,直接放在类里面就可以正常运行。
也许是因为我用的jdk8.0的缘故?或许有什么地方 ...

我用8.0的运行也没错,结果是1,建议用泛型这句话是对楼主的建议:lol
作者: jeromechen    时间: 2014-10-5 00:32
我运行没有报错,也是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);
    }
}
作者: yueyazhishang    时间: 2014-10-5 08:42
楼上回答的很全面,集合存储的是对象,基本类型数据会自动装箱,所以int会变为Integer




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2