“instanceof List”和“o instanceof List ”之间的区别

我认为以下内容没有任何区别:

Object o = new LinkedList(); System.out.println(o instanceof List); System.out.println(o instanceof List); 

如果不能使用instanceof List而不是使用instanceof List实际用法,反之亦然?

没有不同。 通配符在编译时被擦除。

根据这篇博客,答案是“它们完全一样”:

因为javac禁止其目标类型为generics类型的instanceof表达式; 对于强制类型转换,编译器稍微宽松一些,因为允许转换为generics类型,但会发出警告(参见上文)。 无论如何,原始类型应该被无界通配符替换,因为它们具有类似的属性和子类型。

 Object o = new ArrayList(); List list_string = (List)o; //same as (List)o boolean b = o instanceof List; //same as o instanceof List