int m=0;
int i=0;
int s=0;
System.out.println(m==i);//true
//值类型是没有equals方法
//System.out.println(m.equals(i));
分析:对于int 的比较,无需多言,本来就是数值比较。
Integer与int的比较
Integer integer = new Integer(0);
Integer mInteger = Integer.valueOf(0);
Integer sInteger = 0;// 等价于Integer。valueof
int i = 0;
System.out.println(integer == i);//true
System.out.println(mInteger == i);//true
System.out.println(sInteger == i);//true
System.out.println(integer.equals(i));//true
System.out.println(mInteger.equals(i));//true
System.out.println(sInteger.equals(i));//true
分析:
1、Integer类型与int类型通过==比较,Integer会自动拆箱,转换成int数值进行比较
2、equals方法更是读取对应的int数值进行比较。
因此引用类型与值类型之间的比较,使用equals与==都可以。
简单总结:
1、引用类型之间的比较,由于存在-127至128之间的缓存对象,因此使用== 进行比较存在风险。优先使用equals进行比较
2、引用类型与值类型进行比较,由于会自动拆箱,因此使用==和equals都可以正确得到结果
3、建议在实际编码过程中,对数值的比较使用equals
深入总结:
不仅仅Integer,其他的基本类型也都存在缓存,下面给出一个简单图表进行说明
基本类型 装箱类型 取值范围 是否缓存 缓存范围byte Byte -128~127 是 -128~127
short Short -2^15 ~ (2^15 - 1) 是 -128~127
int Integer -2^31 ~ (2^31 - 1) 是 -128~127
long
Long -2^63 ~ (2^63 - 1) 是 -128~127float Float -- 否
double Double
--
否boolean Boolean true、false 是 true、false
char Character \u0000 ~ \uffff 是 \u0000 ~ \uffff
Java博大精深,要想深入,基础必须要好,才能避免bug。
我们程序员的职责就是少写bug,这才是我们一直学习的动力。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx