java吧 关注:1,236,545贴子:12,707,570
  • 2回复贴,共1

Java 每日一题:2016年8月28日

取消只看楼主收藏回复

每天在这里贴一道 Java 题。
问题不难,有 Java 的基本知识就可以做出来。
问题也不偏,日常工作中时不时会碰到。
每日一题索引页:52.36.153.52:8080/javaquestions/

我们知道,对 List 来说,尽管 Long 是 Number 的子类,但 List<Long> 却不是 List<Number> 子类。但对数组来说,Long[] 却是 Number[] 子类。
所以,注释 1 处的语句没有编译错误,但注释 3 处的语句有编译错误。看上去,数组比使用泛型的集合类型更合理、更方便。
把注释 3 和 4 处的语句注释掉,然后运行程序,看看会发生什么?
上面这道题来自《EffectiveJava》 这本书。我做了一点点改动。


1楼2016-08-28 12:08回复
    源程序:
    package javaquestions;
    import java.util.ArrayList;
    import java.util.List;
    public class JavaQuestion20160828
    {
    public static void main(String[] args)
    {
    Number[] numberArray = new Long[2]; // 1
    numberArray[0] = new Integer(5); // 2
    List<Number> numberList = new ArrayList<Long>(); // 3
    numberList.add(new Integer(5)); // 4
    }
    }


    2楼2016-08-28 12:08
    回复
      如果使用数组,编译时可以通过,但运行时会出异常;
      如果使用泛型List,编译时就不能通过。
      哪个好?当然是编译时出错比运行时出错好。


      8楼2016-08-29 00:33
      回复