==和equals的区别

“==”和equals 最大的区别是
  • “==”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值
  • equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值

一、==

基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址(确切的说,是堆内存地址)

注:对于第二种类型,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。因为每new一次,都会重新开辟堆内存空间。

通俗理解:其实==比较的不管是基本数据类型,还是引用数据类型的变量,比较的都是值,只是引用类型变量存的值是对象的地址

二、equals()

equals是Object的方法,用来比较两个对象的地址值是否相等。

注意:
equals 方法不能用于比较基本数据类型,如果没有对 equals 方法进行重写,则相当于“==”,比较的是引用类型的变量所指向的对象的地址值。

一般情况下,类会重写equals方法用来比较两个对象的内容是否相等。比如String类中的equals()是被重写了,比较的是对象的值。

运行速度不同

1、equals():没有==运行速度快。

2、==:运行速度比equals()快,因为==只是比较引用

public class Test {
    public static void main(String[] args) {
        //基本数据类型的比较
        int a=10;
        int b=10;
        System.out.println(a==b);  //true

        //引用数据类型的比较
        //String类(重写了equals方法) 中==与equals的比较

        String a1="hello";
        String a2="hello";
        System.out.println(a1==a2); //true 比较的是地址值 :内容相同 常量池中有内容"hello",对象其实是同一个对象, 地址值相同
        System.out.println(a1.equals(a2));//true

        System.out.println("========================");

        String st1= new String("tyu");
        String st2= new String("tyu");
        System.out.println(st1==st2);//false  比较地址值:在堆内存中的地址值不同
        
    }
}

其实st1与st2相等的原因是用到了内存中的常量池,当运行到st1创建对象时,如果常量池中没有,就在常量池中创建一个对象"tyu",第二次创建的时候,就直接使用,所以两次创建的对象其实是同一个对象,它们的地址值相等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值