Java中的==和equals方法


java中的==和equals方法,需记住两条规则:


1.对于==,如果作用于基本数据类型的变量,则直接比较其存储的 ""是否相等;



    如果作用于引用类型的变量,则比较的是所指向的对象的地址



2. 对于equals方法,注意:equals方法不能作用于基本数据类型的变量



    如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址


    诸如String,Date,Integer等类对equals方法进行了重写的话,比较的是所指向的对象的内容




Object可理解为老祖宗,如果在别的类中看到equals方法,可认为是方法重写,这样比较的是所指向的对象的内容。


    
Integer i1 = new Integer(127);
		Integer i2 = new Integer(127);
		
		System.out.println(i1 == i2);//false
		System.out.println(i1.equals(i2));//true

        两个对象的自地址值不同,所以==的时候是false,

        而equals方法比较的是内容,所以是true.

Integer i5 = 128;
		Integer i6 = 128;
		
		System.out.println(i5 == i6);//false
		System.out.println(i5.equals(i6));//true


以及

Integer i7 = 127;
		Integer i8 = 127;
		
		System.out.println(i7 == i8);//true
		System.out.println(i7.equals(i8));//true



两个为何不属于上面的两条规则呢?

因为查看源码得知:

    
Integer i = 128;//相当于Integer integer = Integer.valueOf(128);
		
		 static final int low = -128;
		 static final int high= 127;
		 
		 
		  public static Integer valueOf(int i) {
				//如果在-128到127之间,就直接从缓冲区里获取数据
        	if (i >= IntegerCache.low && i <= IntegerCache.high)
           	return IntegerCache.cache[i + (-IntegerCache.low)];
        	//如果不在-128到127的范围,那么会新建对象
		  return new Integer(i);
    	  }



注意:Integer的数据直接赋值,如果在-128和127之间,直接从缓冲池里获取数据。


IntegerCache.low 和IntegerCache.high的范围是:


请再次注意(这是一个坑):Integer的数据直接赋值,如果在-128和127之间,直接从缓冲池里获取数据


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭