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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 403383221 中级黑马   /  2013-4-27 21:47  /  1635 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 403383221 于 2013-4-28 10:17 编辑

ArrayList<String> a = new ArrayList<String>();
ArrayList<String> a = new ArrayList();
这两种写法有什么区别???

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 尹丽峰 于 2013-4-27 21:55 编辑

使用该方法返回的值只能是String

以下来自互联网:
Java 语言中引入泛型是一个较大的功能增强。不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了。这带来了很多好处:

1,类型安全。 泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。

2,消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。

3,潜在的性能收益。 泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的 JVM 的优化带来可能。由于泛型的实现方式,支持泛型(几乎)不需要 JVM 或类文件更改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是更能确保类型安全而已。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
尹丽峰 发表于 2013-4-27 21:53
使用该方法返回的值只能是String

以下来自互联网:

大哥,我想知道上面两种写法有木有区别,不是问泛型的好处:L
回复 使用道具 举报
应该这两种都可以用吧,但是感觉后一种肯定没有人用,因为前面已经定义了泛型出来了,后面new的对象肯定也是String类型的,不过这两种方式都不是最好的。
最好的写法是:                List<String> list4 = new ArrayList<String>(); 这样方便面向接口编程。

评分

参与人数 1技术分 +2 收起 理由
黄玉昆 + 2

查看全部评分

回复 使用道具 举报
403383221 发表于 2013-4-27 21:57
大哥,我想知道上面两种写法有木有区别,不是问泛型的好处

第一个是把a实力化为ArrayList<String>()这个类
回复 使用道具 举报
你的第二种写法没有实用性,一旦你向集合种添加非String对象编译时不能通过的.
所以要么用第一种,全部限定类型
要么List list4 = new ArrayList<String>(); 这样写,list4在程序后面可以指向任何List类型的集合

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
泛型是给编译器看的,在内存中并不存在泛型,我觉得这两种写法功能上并没有太大的区别,只是一种编写代码的规范吧

点评

鼓励鼓励,不错  发表于 2013-4-28 09:00

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 glgl

查看全部评分

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