Integer比较时不准确的原因
首先理解的是:Java的装箱和拆箱
什么时候会进行装箱
装箱用到的方法:Integer.valueOf()
Integer i = 100;
什么是会进行拆箱
如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程),例如:a + b
Integer.valueOf()中的cache问题
1 | public static Integer valueOf(int i){ |
如果数值在[-128, 127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用
== 的比较问题
当“==”运算符的两个操作数都是包装类型的引用,则是比较指向的是否是同一个对象,而如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程)。
例如:
1 | Integer a = 1; |