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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一叶障目 中级黑马   /  2014-11-14 22:15  /  1291 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.*;
  2. public class Demo
  3. {
  4.         public static void main(String[] args){
  5.                 List list=new ArrayList();
  6.                 list.add("aabc");
  7.                 list.add("ab");
  8.                 list.add(4);
  9.                 Iterator it=list.iterator();
  10.                 while(it.hasNext()){
  11.                         String s=(String)it.next();
  12.                         System.out.println(s);
  13.                 }
  14.         }
  15.        
  16. }<span style="line-height: 2.2em;">为什么程序编译的时候不会出现问题,编译会出现类型转换问题,jvm不能检测我存储的是String类型,然后判断我的强制转换是否合法吗?</span>
复制代码

11 个回复

倒序浏览
int[] a=new int[6];
a[0]=9.0;
编译会出错,因为我定义数组里面存储的是int型,所以存入小数编译会出错;
那为什么我在集合里存储的是String类型,然后我做强制转换的时候,编译器不能检测出问题?
回复 使用道具 举报
正是因为这个原因,才有了泛型
回复 使用道具 举报
striker 发表于 2014-11-14 22:32
正是因为这个原因,才有了泛型

因为检测不出原因才有的。。。。。。。:dizzy:
回复 使用道具 举报
因为集合中默认的泛型是Object类型,而你插入的整数,会将自动装箱成为Integer类型
回复 使用道具 举报
zhangyangLengen 发表于 2014-11-15 09:46
因为集合中默认的泛型是Object类型,而你插入的整数,会将自动装箱成为Integer类型 ...

:L我问的不是这个意思
回复 使用道具 举报
你的强转合法
回复 使用道具 举报
我感觉应该是编译器无法检测 =左边的类型和右边具体指向的引用数据类型是否一致吧,就是说编译器检测时无法自动向下转型吧,,,帮看看我新发的帖子《泛型问题总结——求高手指导》:handshake
回复 使用道具 举报
可能因为:强转合法(编译时期只是检测语法错误),但是在运行的时期(可能出现运行错误);编译时期是检测不到该运行时期出现的错误的;
Exception异常分为:编译时异常和运行时异常
回复 使用道具 举报
编译器并不知道对象的实际类型,只知道现在的类型,编译器允许Object向下转型

Integer f[]=new Integer[2];
Object f1=new Integer(2);
f[1]=f1;//ERROR
数组看到f1是Object型就没让它进,尽管它实际是Integer型

我想编译器应该可以判断基本数据类型

说的不一定对,就参考下吧
回复 使用道具 举报
zhangyangLengen 发表于 2014-11-15 15:21
可能因为:强转合法(编译时期只是检测语法错误),但是在运行的时期(可能出现运行错误);编译时期是检测 ...

恩,谢谢解答:lol
回复 使用道具 举报
cs8630323 发表于 2014-11-15 16:30
编译器并不知道对象的实际类型,只知道现在的类型,编译器允许Object向下转型

Integer f[]=new Integer[2] ...

OK啦,:D
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马