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之间,直接从缓冲池里获取数据


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值