“==”比较
- 基本类型之间互相比较:以值进行比较,进行比较的两个操作数都是数值类型,即使他们的数据类型不相同,只要他们的值相等,也都将返回true
即就是
Integer a = 1;
Integer b = 2;
Long g = 3L;
System.out.println(g == (a+b));还会输出true
如果超出数据范围,就会返回false,范围为-128~127之间,例如:
Integer e = 200;
Integer f = 200;
System.out.println(e == f);会返回false
-
一边是基本类型,一边是包装类型
- 同类型的进行比较,如Integer 与int,Long与long进行==比较时,会自动拆箱比较值
- 不同类型之间进行比较,则会自动拆箱,且会进行自动向上转型再比较值(低级向高级是隐式类型转换如:byte<short<int<long<float<double,高级向低级必须强制类型转换)
-
两边都是包装类型则直接比较引用地址,但是要注意Integer除外。例如
Integer c = 3;
Integer d = 3;
System.out.println(c == d);会返回true
但是例如
Double d1=12.0;
Double d2=12.0;
System.out.println(d1= =d2);会返回false
equals”比较
在Object类中定义了一个equals方法,这个方法的初始行为是比较对象的内存地址,但在一些类库中已经重写了这个方法(一般都是用来比较对象的成员变量值是否相同),比如:String,Integer,Date 等类中,所以他们不再是比较类在堆中的地址了、
Integer类型的equals
equals(Object obj)方法,在equals(Object obj)方法中,会先判断参数中的对象obj是否是Integer同类型的对象,如果是则判断值是否相同,值相同则返回true,值不同则返回false,如果obj不是Integer类的对象,则返回false。
需要注意的是:当参数是基本类型int时,编译器会给int自动装箱成Integer类,然后再进行比较。
- 基本类型(值类型)之间无法使用equals比较。
- equals参数为值类型,则参数会进行自动装箱为包装类型,之后请参见第3点。
- equals参数为包装类型,则先比较是否为同类型,非同类型直接返回false,同类型再比较值。
例如:
Integer a = 1;
Integer b = 2;
Integer c = 3;
Long g = 3L;
System.out.println(c.equals(a+b));//返回true,类型相同,值相同
System.out.println(g.equals(a+b));//返回false,类型不同,直接返回false
总结
" == "在基本数据类型比较的是:值内容, 引用类型时比较的是:地址
equals 重写比较的是:值内容 , equals不重写比较的是:地址