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-09-20 10:44:19 +08:00
ArrayList list1 这里其实是 ArrayList<Object> ,new ArrayList<String> 当然可以给 ArrayList<Object>
|
3
liuhuansir 2019-09-20 10:44:33 +08:00
第一种的类型丢失了吧
|
4
Raymon111111 2019-09-20 10:45:19 +08:00
第一句之后, list1 里面装的是 Object
|
5
Duluku 2019-09-20 10:45:57 +08:00 via iPhone
说一个题外话、一般都是这么定义的:
List list1 = new ArrayList<string>(); |
6
misaka19000 2019-09-20 10:48:49 +08:00
因为 String 类型是 Object 类型的子类型
|
7
secretman 2019-09-20 10:49:25 +08:00
看看泛型的类型擦除?
|
8
Beeethoven 2019-09-20 10:51:08 +08:00 1
IDEA 语法检查 ArrayList list1 = new ArrayList<string>();
会让 string 变灰 建议你直接删了 |
9
Lin0936 2019-09-20 10:52:49 +08:00
伪泛型,类型擦除了吧
|
10
licht114 2019-09-20 10:54:28 +08:00
@Beeethoven ArrayList<String> list1 = new ArrayList<string>();
这样才会提示,你说的那样不会提示 |
11
chendy 2019-09-20 10:56:09 +08:00
ArrayList list,没有指定泛型,啥都可以装
ArrayList<String> 是一个 ArrayList,可以赋值上去 因为泛型擦除,所以 <String> 并没有效果 顺便 List<String> list = new ArrayList<>() 这种写法意义不大,接口更多用在参数 /字段 /返回值上,局部变量这样做意义很小,还会丢掉部分特殊方法 |
12
monkeylyf 2019-09-20 11:01:57 +08:00
因为是第一个申明的是 ArrayList<Object>, 1 可以被 autobox 成 Integer 放进去没问题。
第二个申明的是 ArrayList<String>, 1 不是 String,所以在编译的时候就报类型不匹配的错啦。 以上都没有到 runtime。 |
13
lenchu 2019-09-20 11:15:48 +08:00
Java 的泛型是伪泛型,只在编译时起作用,字节码里面没有泛型信息
|
14
letianqiu 2019-09-20 11:28:59 +08:00 via Android 1
|