这是工作代码。我知道比较equals更好,但是为什么在创建具有相同值的新Double时,它指的是内存中的不同位置,而Long却没有。
public class Main {
public static void main(String[] args) {
Long firstLong = 1L;
Long secondLong = 1L;
Double firstDouble = 1.0;
Double secondDouble = 1.0;
System.out.println(firstLong == secondLong);
System.out.println(firstDouble == secondDouble);
}
}
整数类型的优化。长,像整数值-128...127被缓存并存储在堆栈上。现在看来,这些值甚至可以改变。
如果分配了超出此范围的值,则会创建新对象,并且一切都应该是正确的:
Long v = 1L;这是一个快捷方式Long v = Long.valueOf(1L);查看实现:
可以看到 和 之间的值
-128被127缓存了,并没有创建新的实例。