
ArrayList list1 = new ArrayList<string>();</string>
list1.add(1);
编译不报错运行不报错。。 但是这样肯定是会报错的:
ArrayList<string> list2 = new ArrayList<>();</string>
list2.add(1);
1 zhao1014 OP </string>这玩意是没有的,我不知道为啥发出来会有个</string>(狗头)。 |
2 airfling 2019 年 9 月 20 日 ArrayList list1 这里其实是 ArrayList<Object> ,new ArrayList<String> 当然可以给 ArrayList<Object> |
3 liuhuansir 2019 年 9 月 20 日 第一种的类型丢失了吧 |
4 Raymon111111 2019 年 9 月 20 日 第一句之后, list1 里面装的是 Object |
5 Duluku 2019 年 9 月 20 日 via iPhone 说一个题外话、一般都是这么定义的: List list1 = new ArrayList<string>(); |
6 misaka19000 2019 年 9 月 20 日 因为 String 类型是 Object 类型的子类型 |
7 secretman 2019 年 9 月 20 日 看看泛型的类型擦除? |
8 Beeethoven 2019 年 9 月 20 日 IDEA 语法检查 ArrayList list1 = new ArrayList<string>(); 会让 string 变灰 建议你直接删了 |
9 Lin0936 2019 年 9 月 20 日 伪泛型,类型擦除了吧 |
10 licht114 2019 年 9 月 20 日 @Beeethoven ArrayList<String> list1 = new ArrayList<string>(); 这样才会提示,你说的那样不会提示 |
11 chendy 2019 年 9 月 20 日 ArrayList list,没有指定泛型,啥都可以装 ArrayList<String> 是一个 ArrayList,可以赋值上去 因为泛型擦除,所以 <String> 并没有效果 顺便 List<String> list = new ArrayList<>() 这种写法意义不大,接口更多用在参数 /字段 /返回值上,局部变量这样做意义很小,还会丢掉部分特殊方法 |
12 monkeylyf 2019 年 9 月 20 日 因为是第一个申明的是 ArrayList<Object>, 1 可以被 autobox 成 Integer 放进去没问题。 第二个申明的是 ArrayList<String>, 1 不是 String,所以在编译的时候就报类型不匹配的错啦。 以上都没有到 runtime。 |
13 lenchu 2019 年 9 月 20 日 Java 的泛型是伪泛型,只在编译时起作用,字节码里面没有泛型信息 |
14 letianqiu 2019 年 9 月 20 日 via Android |