Java基础之数据比较Integer、Short、int、short(2)

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~127  
float   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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/c769b1b315f1f800c22d7c47d0c020fc.html