Java 知识点
1. 哪个类包含 clone 方法?是 Cloneable 还是 Object ?
clone 方法定义在 Object 中,而且最终是通过调用 native 方法实现。Cloneable 是一个标志性接口,不含任何方法。
public interface Cloneable {
}
// 只有实现了 Cloneable 接口才允许对象被 clone
protected Object clone() throws CloneNotSupportedException {
if (!(this instanceof Cloneable)) {
throw new CloneNotSupportedException("Class " + getClass().getName() + " doesn't implement Cloneable");
}
return internalClone();
}
// 通过 native 方法实现
@FastNative
private native Object internalClone();
2. Java 中的 ++ 是线程安全的么?
不是,一个 ++ 底层涉及多个指令,比如读取变量值,增加,然后存储回内存,这个过程可能会出现多个线程交叉。
3. a = a + b 与 a += b 的区别?
+= 隐式的将加操作的结果转换为持有结果的类型。a + b 会将 a b 都提升到 int 类型,然后在执行加法操作。
4. Integer a = 127 是否与 Integer b = 127 相等?
是,只要 a、b 的值在 [-128, 127] 之间他们都是相等的。
5. Java 7 开始,switch 中可以使用 String 原理是什么?
仅仅是一个语法糖,内部的实现是在 switch 中使用字符串的 hashcode。
6. 构造器链是什么?
简单讲就是从一个构造器调用另一个构造器。
7. 64 位 JVM 中,int 的长度是?
Java 中,int 类型变量的长度是一个固定值,与平台无关,都是 32 位。意思就是说,在 32 位 和 64 位 的Java 虚拟机中,int 类型的长度是相同的。
8. Java 中 WeakReference 与 SoftReference 的区别?
WeakReference 一旦失去最后一个强引用就会被 GC 回收,而 SoftReference 虽然不能阻止被回收,但是可以延迟到 JVM 内存不足的时候。