自动装箱与拆箱
进入Locks研究之前,先看一段有趣的代码
1 public static void main(String[] args) {
2 Integer a = 1;
3 Integer b = 2;
4 Integer c = 3;
5 Integer d = 3;
6 Integer e = 321;
7 Integer f = 321;
8 Long g = 3L;
9 System.out.println(c == d);
10 System.out.println(e == f);
11 System.out.println(c == (a+b));
12 System.out.println(c.equals(a+b));
13 System.out.println(g == (a+b));
14 System.out.println(g.equals(a+b));
15 }
你猜我知不知道结果? 哼哼,还是直接给一个总结吧:
-
AutoBoxing: 将primitive type转换成wrapper class
-
Unboxing:反之
-
Integer a = 1 <–编译–> Integer a = Integer.valueOf(1)
-
做运算操作时会拆箱, == 的时候再装箱
-
-128 – 127 之间的字面量,无论是Long 还是 Short 还是 Integer, 编译完后会放入全局的常量池而不是在运行时在堆上去new, 这些变量会引用常量池中的地址