积累的2道面试题

面试题:


1.如下:
 List<String> list = new ArrayList<String>();
 list.add("Hello");
 list.add(90);  //这边编译出错
 for(Object o:list){
  System.out.println(o+","+0.getClass());
 }

 要求输出格式:Hello,class java.lang.String
        90,class java.lang.Integer
 
 
 问: 这段程序怎么改?
 知识点:泛型是给编译时用的。 在运行时泛型会被擦除。

 第一种方法:利用发射
  List<String> list = new ArrayList<String>();
  list.add("Hello");
  list.getClass().getMethod("add",Object.class).invoke(list,90);
  for(Object o:list){
  System.out.println(o+","+0.getClass());
  }

 第二种方法:
  List<String> list = new ArrayList<String>();
  list.add("Hello");
  List list2 = list;//共用一块内存,指向同一内存地址,list2的操作就是对list的操作
  list2.add(90);
  for(Object o:list){
  System.out.println(o+","+0.getClass());
  }

2.如下:
 @Test
 public void aa(){
 
  while(true)
   Object o = new Object();

  //类似题目:
  if(false)
   String ss = new String();
  


 }

 问: 能编译通过?为什么?

 
 //java编译时,会检查一个变量的可到达性和可使用性。

你可能感兴趣的:(面试题)