Java Integer比较

2020-04-13 16:00:51来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

Java Integer比较

代码

 1 @Slf4j
 2 public class IntegerCompare {
 3     public static void doCompare() {
 4 
 5         Integer a = 127; //Integer.valueOf(127)
 6         Integer b = 127; //Integer.valueOf(127)
 7         log.info("\nInteger a = 127;\n" +
 8                 "Integer b = 127;\n" +
 9                 "a == b ? {}", a == b);    // true
10 
11         Integer c = 128; //Integer.valueOf(128)
12         Integer d = 128; //Integer.valueOf(128)
13         log.info("\nInteger c = 128;\n" +
14                 "Integer d = 128;\n" +
15                 "c == d ? {}", c == d);   //false
16 
17         Integer e = 127; //Integer.valueOf(127)
18         Integer f = new Integer(127); //new instance
19         log.info("\nInteger e = 127;\n" +
20                 "Integer f = new Integer(127);\n" +
21                 "e == f ? {}", e == f);   //false
22 
23         Integer g = new Integer(127); //new instance
24         Integer h = new Integer(127); //new instance
25         log.info("\nInteger g = new Integer(127);\n" +
26                 "Integer h = new Integer(127);\n" +
27                 "g == h ? {}", g == h);  //false
28 
29         Integer i = 128; //unbox
30         int j = 128;
31         log.info("\nInteger i = 128;\n" +
32                 "int j = 128;\n" +
33                 "i == j ? {}", i == j); //true
34     }
35 }
View Code

结果:

Integer a = 127;
Integer b = 127;
a == b ? true
2020-04-13 22:30:47.162  INFO 4492 --- [  restartedMain] com.example.newdemo.IntegerCompare       : 
Integer c = 128;
Integer d = 128;
c == d ? false
2020-04-13 22:30:47.162  INFO 4492 --- [  restartedMain] com.example.newdemo.IntegerCompare       : 
Integer e = 127;
Integer f = new Integer(127);
e == f ? false
2020-04-13 22:30:47.162  INFO 4492 --- [  restartedMain] com.example.newdemo.IntegerCompare       : 
Integer g = new Integer(127);
Integer h = new Integer(127);
g == h ? false
2020-04-13 22:30:47.162  INFO 4492 --- [  restartedMain] com.example.newdemo.IntegerCompare       : 
Integer i = 128;
int j = 128;
i == j ? true

结论:

  • =比较的是引用

  • equal比较的是integer实际的值

第一个相等,第二个不相等,是因为Interger.valueOf内部做了缓存(-127,127)。

  • a, b相同的引用。
  • c,d超过了缓存的范围直接new,产生不同的引用,所以不相等。

 Integer e = 127;

Integer f = new Integer(127);

e从缓存中读取。f则是新的对象,用=判断时候是两个不同的引用,所以不相等。

Integer g = new Integer(127);
Integer h = new Integer(127);
g和h都是新的引用。

Integer i = 128;
int j = 128;
把装箱的 Integer 和基本类型 int 比较,前者会先拆箱再比较,比较的肯定是数值而不是引用,因此返回 true


原文链接:https://www.cnblogs.com/Brake/p/12694602.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:面试官再问你 HashMap 底层原理,就把这篇文章甩给他看

下一篇:MyBatis中Executor源码解析之BatchExecutor搞不懂