方舟计划-1

326 阅读1分钟

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 内存不足的时候。