今天小编今天在学习的过程中发现了一些java的细节问题,然后感觉超级奇怪,然后通过查阅才发现是平常不注意的细节问题。
首先看如下代码:
public static void main(String[] args){
Integer a = 68;
Integer b = 68;
Integer c = 127;
Integer d = 127;
Integer e = 128;
Integer f = 128;
System.out.print("a和b:");
System.out.println(a == b);
System.out.print("c和d:");
System.out.println(c == d);
System.out.print("a和b:");
System.out.println(e == f);
}
大家猜一下输出的是什么呢?是不是第一感觉觉得输出的都是true呢?哈哈哈哈。= =
其实答案是两个true和一个false。
这是为什么呢?
这里涉及到一个自动装箱问题,显而易见,Integer类在进行赋值的过程中如果超过127就会进行一个地址比较,在jvm中地址是不一样的才发生一个false返回结果。此时我们必须明白就是,java中Integer类是超过128就自动装箱了,那么有正必有负,它的负值范围在多少呢?正确来讲是-128~127之间。如果不信的朋友可以亲手试试。
总之,在这里要记住了喂!!~