首页 > 试题广场 >

下面程序的运行结果是什么() public class

[问答题]
下面程序的运行结果是什么()
public class TestAA{
    public static void main(String[] args) {
        Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
        System.out.println(f1 == f2);
        System.out.println(f3 == f4);
    }
}


f1==f2,这里会给f2自动装箱,因为是在-128-127之间,所以不用new新的对象了,直接引用常量池的对象。故他们指向的是同一个对象,是true;    f3==f4,f3 f4不在-128-127之间,所以各自在堆中开辟新的空间,指向的不是同一对象,为false。
发表于 2019-05-29 22:34:12 回复(1)
Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
这段代码会进行自动装箱,即 Integer.valueOf(int n);
f1 = Integer.valueOf(100);
f2 = Integer.valueOf(100);
当 n 不在[-128,127]之间时,会创建一个Integer对象, new Integer(n);-----可以参考源码
f3 = new Integer(500);
f4 = new Integer(500);
所以运行结果为:
true
false
发表于 2019-07-05 20:33:45 回复(0)