进入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, 这些变量会引用常量池中的地址