题解笔记1

题解笔记1

在jdk1.5以上版本中,以下代码将打印出

import java.util.*;
import java.util.List;

public class test7{
     
	public static void main(String args[]) {
     
        List  Listlist1 = new ArrayList();
        Listlist1.add(0);
        List Listlist2 = Listlist1;
        
        //System.out.println(Listlist1.get(0).getClass());
        System.out.println(Listlist1.get(0) instanceof Integer);
        System.out.println(Listlist2.get(0) instanceof Integer);
    }
}


  • A.编译错误
    
  • B.true true
    
  • C.true false
    
  • D.false false
    

答案是B

知识点:

  1. List集合中的元素必须是对象,不能是基本类型。ArrayList在底层存储数据时就是采用的一个Object[]类型的数组来实现的。

  2. 在使用get方法时,会将存储的对象强转为List< T > 中的泛型T。但是此题中没有给ArrayList泛型,所以使用的默认值, 即Object类型。所以此例中返回的是一个Object的对象。

  3. 在jdk5之后会发生自动装箱和自动拆箱的操作。因为在使用add方法的时候由于0是基本类型, 所以在add时会发生自动装箱操作, 将0转换为Integer类型然后添加到ArrayList中。

  4. List Listlist2 = Listlist1是引用型赋值,指向的对象是同一个,因此 Listlist1.get(0)和Listlist2.get(0)获取到的对象实际是同一个。

  5. instanceof在进行比较时会获取对象的实际类型进行比较。因为此例中通过get获取的对象的实际类型为Integer(第10行通过获取它的Class对象进行验证)所以 Listlist1.get(0)和Listlist2.get(0)获取到的对象的实际类型肯定是Integer类型的, 所以这两个输出的都是true。

运行结果

题解笔记1_第1张图片

你可能感兴趣的:(Java基础笔记,java,经验分享)