这是一个很偏的知识点,可能有的人只是知道Integer类是int的包装虽然特么类,它的对象是应用对象, 其实不然。
注意:
自动装箱规范要求boolean,byte,char在-128~127之间的short和int被包装到固定的对象中。对于Integer类型的变量,在以上的范围内的变量值,直接指向常量池中的缓存地址,不会new开辟出新的空间。
下面是验证的代码:
Integer a = 100;
int b = 100;
System.out.println(a==b);;// 比较两个变量的地址
System.out.println(a.equals(b));// 比较两个变量的数值true
Integer c1 = 128;
Integer d1 = c1;
System.out.println(c1==d1);//指向同一块内存空间 ,比较的是两个变量的地址 true
Integer c = 128;
Integer d = 128; //各自new出新的内存空间
System.out.println(c == d);//比较两个变量的地址 false
System.out.println(c.equals(d));//比较两个变量的数值 true
Integer g = 100;
Integer h = 100;
System.out.println(g == h);//比较两个变量的地址 true 显然g 和 h 指向的是同一块缓存
System.out.println(g.equals(h));//比较两个变量的数字 true
Integer e = 228;
int f = 228;
System.out.println(e == f);//比较两个变量的地址 true
System.out.println(e.equals(f));//比较两个变量的数值 true
int i = 100;
int j = 100;
System.out.println(i == j); //比较的是数值 而对于数值类型,==比较的是两者的数值大小