网易2020开发面试题
第二题:
题目描述:
答案:
解析:
Java 中泛型在编译时会进行类型擦除,因此l1和 l2 类型擦除后的结果都是 java.util.ArrayLis ,进而
l1.getClass() == l2.getClass() 的结果是 true。
第十题:
题目描述:
答案:
解析:在Demo类的内部有一个静态内部类,静态内部类只有在被外部类调用的时候才会加载。故在外部类调用的时候内部类才会进行加载并且实例化,在这里保证了是懒加载。
第十一题:
题目描述:
对象的浅拷贝和深拷贝区别是什么?在JAVA中如何实现?
解答:
首先不管是浅拷贝还是深拷贝,被拷贝的对象都要实现Cloneable接口,并且重写clone方法。
浅拷贝:在拷贝的时候只考虑被拷贝的对象,对被拷贝对象的引用数据类型不考虑,即从某种意义上来说克隆出的对象和原对象之前还存在一些关联。
深拷贝:在复制的时候不只考虑被复制的对象,也考虑到了被复制对象的引用数据类型,需要其内部的引用数据类型也要实现Cloneable接口,并且重新clone方法。如果内部的引用数据类型的内部还有引用别的数据类型,那么也需要实现Cloneable接口重新clone方法。还有的某些方法通过将原对象序列化输出后又读取进内存,这样读进来的对象就是原对象的一个深拷贝。
(注:基本数据类型是不存在引用的问题)
第十二题:
题目描述:
使用Thread类和Runnable方法来创建一个线程的区别是什么?
解答:
两种方式创建的线程本质上没有区别,主要是创建方式不同。
Thread类:通过继承Thread类并重写run()方法实现;
Runnable方法:通过实现Runnable接口并重写run()方法实现;
由于Java是单继承,多实现的,后者的可扩展性更高;同时通过Runnable实现的线程类能够实现某些资源的共享。