为什么不会报错呢。。。

2019-09-20 10:41:19 +08:00
 zhao1014

ArrayList list1 = new ArrayList<string>();</string>

list1.add(1);

编译不报错运行不报错。。 但是这样肯定是会报错的:

ArrayList<string> list2 = new ArrayList<>();</string>

list2.add(1);

4384 次点击
所在节点    Java
17 条回复
zhao1014
2019-09-20 10:42:39 +08:00
</string>这玩意是没有的,我不知道为啥发出来会有个</string>(狗头)。
airfling
2019-09-20 10:44:19 +08:00
ArrayList list1 这里其实是 ArrayList<Object> ,new ArrayList<String> 当然可以给 ArrayList<Object>
liuhuansir
2019-09-20 10:44:33 +08:00
第一种的类型丢失了吧
Raymon111111
2019-09-20 10:45:19 +08:00
第一句之后, list1 里面装的是 Object
Duluku
2019-09-20 10:45:57 +08:00
说一个题外话、一般都是这么定义的:

List list1 = new ArrayList<string>();
misaka19000
2019-09-20 10:48:49 +08:00
因为 String 类型是 Object 类型的子类型
secretman
2019-09-20 10:49:25 +08:00
看看泛型的类型擦除?
Beeethoven
2019-09-20 10:51:08 +08:00
IDEA 语法检查 ArrayList list1 = new ArrayList<string>();

会让 string 变灰 建议你直接删了
Lin0936
2019-09-20 10:52:49 +08:00
伪泛型,类型擦除了吧
licht114
2019-09-20 10:54:28 +08:00
@Beeethoven ArrayList<String> list1 = new ArrayList<string>();
这样才会提示,你说的那样不会提示
chendy
2019-09-20 10:56:09 +08:00
ArrayList list,没有指定泛型,啥都可以装
ArrayList<String> 是一个 ArrayList,可以赋值上去
因为泛型擦除,所以 <String> 并没有效果

顺便 List<String> list = new ArrayList<>() 这种写法意义不大,接口更多用在参数 /字段 /返回值上,局部变量这样做意义很小,还会丢掉部分特殊方法
monkeylyf
2019-09-20 11:01:57 +08:00
因为是第一个申明的是 ArrayList<Object>, 1 可以被 autobox 成 Integer 放进去没问题。
第二个申明的是 ArrayList<String>, 1 不是 String,所以在编译的时候就报类型不匹配的错啦。
以上都没有到 runtime。
lenchu
2019-09-20 11:15:48 +08:00
Java 的泛型是伪泛型,只在编译时起作用,字节码里面没有泛型信息
letianqiu
2019-09-20 11:28:59 +08:00
@airfling
@monkeylyf 你们的理解是错误的。ArrayList 和 ArrayList<Object>根本不是同一个东西。ArrayList 其实是 ArrayList<?>
monkeylyf
2019-09-20 13:59:32 +08:00
@letianqiu 你的理解是正确的。
zhao1014
2019-09-20 16:06:30 +08:00
@airfling 重点是 list.add(1),这里我创建了 String 类型的 Arraylist 但存进去了一个 integer 类型的元素
zhao1014
2019-09-20 16:10:25 +08:00
@chendy 感谢!解答简明易懂!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/602439

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX