Java中==与equals()方法的区别

1. 基本数据类型和引用数据类型
八大基本数据类型:byte、short、int、long、、char、boolean、float、double,八种基本数据类型都有相对相应的包装类,类中包含各操作方法,在不进行初始化时,值为空。
引用数据类型:类,接口类型,数组类型等。
特殊的引用数据类型:String、Date、文件类、包装类等

2. ==与equals
在使用 == 时,判断两边的是否相等,根据数据类型的不同可以分为以下两种类型:
1.基本数据类型:根据基本数据类型的值判断是否相等,注意事基本数据类型的值,两端数据类型可以不一样,12==12.0F 是true
2. 引用数据类型:比较引用对象的地址值是否相等
equals()方法是Object类中的一个方法,Object是Java中任意类的父类,Object类中的equals()比较类对象的地址值是否相同,其源码如下:

  public boolean equals(Object obj) {
        return this == obj;
    }

由源码的方法现实可以看出,Object类型的equals()与==在一般的引用数据类型比较是是一样的。但是对于特殊的引用数据类型,Java在其实现类中重写了equals()比较的不是两个对象的地址值是否相等,而是比较两个对象的属性内容是否完全相等。如:

        Object object1 = new Object();
        Object object2 = new Object();
        System.out.println("一般引用数据类型:"+object1.equals(object2));
        Integer integer1 = new Integer(12);
        Integer integer2 = new Integer(12);
        System.out.println("基本数据包装类:"+integer1.equals(integer2));;

其结果是:

一般引用数据类型:false
基本数据包装类:true
  1. 关于基本数据类型与其包装类==与equals()的使用
    详细代码:
       int i1 = 127;
       float f1 = 127f;
       Integer i2 = new Integer(127);
       Integer i3 = new Integer(127);
       Integer i4 = Integer.valueOf(127);
       Integer i5 = Integer.valueOf(127);
       Integer i6 = Integer.valueOf(128);
       Integer i7 = Integer.valueOf(128);

       System.out.println(i1 == f1);//判断值相等,true
       System.out.println(i1 == i2);//i2 创建了新对象,true
       System.out.println(i1 == i4);// valueOf 也是创建了一个新对象,true

       System.out.println(i2.equals(i3));//true 重写equals方法,比较值相等
       System.out.println(i2==i3);//false 比较内存地址相等

       System.out.println(i2.equals(i4)); //true,比较值相等
       System.out.println(i2==i4);// true,Integer数据类型的缓存机制(Catch),范围是-128~127

       System.out.println(i4==i5);// true
       System.out.println(i6==i7);//flase

其结果:

true
true
true
true
false
true
false
true
false

基本数据类型的包装类由于使用频繁,Byte、Short、Integer、Long、Character、Boolean设有缓存机制,其中Byte、Short、Integer、Long、Character都是-128~127范围设置缓存机制。
在这里插入图片描述
如Integer在执行valueOf的时候,会先去检查内存中是否存在该数字,如果存在的话,就直接从内存中取出返回,如果不存在的话,就新建一个Integer对象。如i4与i5的地址是811,i6与i7则是因为数值是128不在缓存内,都是重新创建的因此地址不同。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值