网站制作及实现/武汉网站推广优化
java中,任何对象都继承自Object,所以都有equals()方法。在基本类型中,两个数值之间的比较==和equals()方法,比较的都是两个操作数的地址,地址相同,则返回值为true。在对象中,不管是自己写的对象还是java中已经有的对象,如果这个类对象复写了继承自Object类的equals()方法,将原地址比较改为内容比较,那么对象在使用equals()比较时,则比较的不再是两个对象的地址,而是比较的两个对象的存储内容。比如,String类,它复写了equals()方法,所以使用equals()方法比较两个字符串时,比较的是两个字符串的内容,但使用==比较的还是两个字符串的地址,这一点还是不变的。
接下来我们要看的是基本类型和它对应的封装类型比较时出现的自动拆箱和自动装箱问题。
1、比较表达式符号:==或者equals
2、比较表达式:
基本类型==基本类型的封装类型;
基本类型封装类型.equals(基本类型);
3、基本类型:byte,int,对应封装类型:Byte,Integer;
代码如下:
/** * Created by cxh on 17/07/21. */ public class Main {public static void main(String argv[]){Main test=new Main(); Integer i1=100; Integer i2=128; Integer i3=-128; Integer i4=127; Integer i9=127; Integer i10=128; int i5=100; int i6=128; int i7=-128; int i8=127; Byte b1=-128; Byte b2=127; Byte b3=127; byte b4=-128; byte b5=127; byte b6=127; //封装类型==基本类型:封装类型先拆箱为基本类型,再进行数值上的比较. System.out.println(i1==i5); System.out.println(i2==i6); System.out.println(b1==b4); System.out.println(b2==b5); //封装类型.equals(基本类型):基本类型先装箱为包装类型,如果基本类型不为空且数值和封装类型相同,则返回true /**Integer对应的源码: * public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; } */ System.out.println(i1.equals(i5)); System.out.println(i2.equals(i6)); System.out.println(b1.equals(b4)); System.out.println(b2.equals(b5)); //封装类型.equals(封装类型):先进行类型,类型相同的情况下,再比较值,如果值也相同,则返回true System.out.println(i3.equals(i7)); System.out.println(i4.equals(i8)); System.out.println(b3.equals(b6)); //封装类型==封装类型:Integer值如果在-128-127,则返回true,这和Integer.valueOf()的缓冲对象有关.否则返回false; System.out.println(i9.equals(i4)); System.out.println(i3.equals(i10)); } }
结果如下:
true
true
true
true
true
true
true
true
true
true
true
true
false
Process finished with exit code 0