public static void in(Object...objects) { System.out.println(objects); } public static void in(Collection<?> c){ System.out.println(c); }
Object obj = Arrays.asList(1, 2, 3); in(obj); // [Ljava.lang.Object;@5b480cf9 in((List) obj); // [1, 2, 3]
到目前为止,我没有任何问题,但我不理解这段代码的输出:
in(obj instanceof List ? (List) obj : obj); // [Ljava.lang.Object;@6f496d9f
为什么会这样?我认为它应该相当于 in((List)obj)
in((List)obj)
一个表达式只有一个编译时类型。表达式 obj instanceof List ? (List) obj : obj 不可能是类型 List
obj instanceof List ? (List) obj : obj
List
List list = obj instanceof List ? (List) obj : obj;
它将尝试分配三元表达式求值的结果,这可能是 obj 类型为Object的。
obj