黑马程序员技术交流社区

标题: 有个小问题 请教下啊 [打印本页]

作者: 939676244    时间: 2013-9-16 21:21
标题: 有个小问题 请教下啊
本帖最后由 杨增坤 于 2013-9-19 12:29 编辑

为什么第一个不可以,第二个就能运行呢?{:soso_e103:}

555.png (38.11 KB, 下载次数: 37)

555.png

6666.png (72.09 KB, 下载次数: 26)

6666.png

作者: 黄兴旺    时间: 2013-9-16 21:33
亲  把代码贴出来吧  不要截图,看不清的。
作者: 神之梦    时间: 2013-9-16 23:26
贴代码不是更容易么
作者: 李锡碧    时间: 2013-9-17 01:12
楼主  以后直接帖代码吧{:soso_e127:}

数组和集合类同是容器,有什么不同?
数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本类型数据,集合中只能存储对象。

作者: 比烟花寂寞_neve    时间: 2013-9-17 01:21
你好,我很想和你一起探究,但是我没有办法知道你的问题所在,因为图片太模糊了,可以加我一下QQ么
作者: 比烟花寂寞_neve    时间: 2013-9-17 01:21
QQ是:921638027
作者: 陶智第    时间: 2013-9-17 07:54
集合ArrayList也是有限定的数据类型,它只能有一种数据类型。
当你存字符串时,它的默认类型就为String
当你存整数时,它的默认类型就为Integer
但同一集合中不能同时存两种或两种以上的数据类型
作者: freehiker    时间: 2013-9-17 11:08
  1. import java.util.ArrayList;


  2. public class Test {

  3.         public static void main(String[] args) {
  4.                 // TODO Auto-generated method stub
  5.                 ArrayList al = new ArrayList();
  6.                 al.add("java");
  7.                 al.add(4);
  8.                 System.out.println(al);
  9.         }

  10. }
复制代码
如果没有设置泛型的话,ArrayList是可以存储多种数据类型的噢
作者: 刘劲松    时间: 2013-9-17 13:05
陶智第 发表于 2013-9-17 07:54
集合ArrayList也是有限定的数据类型,它只能有一种数据类型。
当你存字符串时,它的默认类型就为String
当 ...

回答的不太正确。如果通过正常加入是不行的。集合加了泛型就是进行了泛型限定,什么类型的对象才能加进来。编译时,编译器是会检查泛型的(所以报错),但是到了运行时期,泛型都是被去掉的。这就是所谓向前兼容的例子。因为如果要运行带泛型,java底层代码很多都得重写,工程量大得。。。,这在短时间内是不可能的(考虑到各大厂商的利益和需要付出的代价)。C++是带的。

这时候有反射(reflect)的概念,反射可以穿过编译期,通过获取字节码文件获得方法,invoke方法的调用,最终可以实现往泛型限定的集合里面添加不同类型的对象。

作者: 杨修    时间: 2013-9-17 15:43
楼主,第二个的while语句里面没有强转对象的动作,而第一个while语句里面有(String)(字符串)的动作,这明显就是把每一个集合中的对象迭代取出,然后进行字符串的特有操作。
但是,在第一个代码里面不仅添加了字符串,还添加了数字4,4自动提升为Integer类型。所以会发生ClassCastException。
提醒下:集合中添加的对象为Object类型。可以各种强转,但是各种强转只能是针对自己本类类型的对象。
作者: 张云飞    时间: 2013-9-17 16:02
集合如果不指定泛型的话,是可以添加多种类型的。
  1. import java.util.*;
  2. import static java.lang.System.*;
  3. class  Test
  4. {
  5.     public static void main(String[] args) throws IOException
  6.         {
  7.                 ArrayList arr = new ArrayList();
  8.                 arr.add("zhang");
  9.                 arr.add("4");
  10.                 arr.add(new Integer(4));
  11.                
  12.                 Iterator it = arr.iterator();
  13.                 while(it.hasNext()){
  14.                         sop(it.next().toString());
  15.                 }
  16.     }
  17.        
  18.         public static void sop(String str){
  19.                 out.println(str);
  20.         }
  21. }
复制代码
这是木有错的啊,其实我也看不清图片上具体的问题。。。





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