Java中整型数值==和equals的处理

前言

equals 比较内容, == 比较地址。

PS.

equals在Object类中,作用和==完全是一样的,都是对对象地址的比较,不是比较值。

在String类中,equals被重写成了字符串的具体值的比较,而不再是地址比较。

==:

1)基本类型之间互相比较:值进行比较。

比如:

         return 5==6;

返回false

PS.

         byte n1 = 5;

         short n2 = 129;

         return n1 == n2;

返回false,n1会隐式转为short,低级向高级是隐式类型转换,高级向低级必须强制类型转换,byte<short<int<long<float<double

2)一边是基本类型,一边是包装类型:

同类型的进行比较,如Integer 与int,Long与long进行==比较时,会自动拆箱。

比如:

         int a = 220;

         Integer b = 220;

        System.out.println(a==b);//true

不同类型之间进行比较,如果有一方为非包装类,则会自动拆箱,且会进行自动向上转型。

比如:

         int a = 220;

         Short b = 220;

        System.out.println(a==b);//true

3)两边都是包装类型:

如果两边是同类型的包装类,比较地址。

如果两个都是new出来的对象,直接为false,如果是常量赋值,会引用存在的缓存对象,关于包装类型的;如果两缓存机制,请自行了解;

如果为不同包装类,则不会拆箱,且不能比较,编译会报错。

equals():

先比较类型,再比较值

equals可以用来比较字符串以及引用类型是否相等;但无法比较值类型,如整形int,double

1)基本类型之间互相比较:无法比较。

2)一边是基本类型,一边是包装类型:

同类型的进行比较,如Integer 与int,Long与long进行比较时,先会进行自动装箱,基本型转换为其封装类型

不同类型之间无法进行比较。

3)两边都是包装类型:

如果是同类型包装类的话,直接比较值;

如果是不同类型包装类,不会进行拆装箱,不能比较,编译会报错。

猜你喜欢

转载自blog.csdn.net/a83370892/article/details/83052383