代码之家  ›  专栏  ›  技术社区  ›  zhuguowei

为什么类强制转换在java ternay运算符中不起作用

  •  2
  • zhuguowei  · 技术社区  · 7 年前

    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)

    1 回复  |  直到 7 年前
        1
  •  3
  •   JB Nizet    7 年前

    一个表达式只有一个编译时类型。表达式 obj instanceof List ? (List) obj : obj 不可能是类型 List

    List list = obj instanceof List ? (List) obj : obj;
    

    它将尝试分配三元表达式求值的结果,这可能是 obj 类型为Object的。