== 和 equals()的区别

==:        

        判断两个对象是否相等。

        对于基本数据类型,比较的是值是否相等;

        对于引用类型,比较的是内存地址是否相同;

equals():

        他的作用也是判断两个对象是否相等,在没有被重写的情况下,equals等效于"=="。

        注*:equals()属于Object类

举个栗子:

public class Test{
    public static void main(String[] args){
        String a = new String("奥里给!");
        String b = new String("奥里给!");  
        System.out.println(a == b);
        System.out.println(a.equals(b));
    }
}

看看结果:

false
true

有的小伙伴可能就会问了,卧槽,你不是说两个等效的吗,为什么返回结果不一样???

解析:

这里a和b都是String类型,引用类型比较的是内存地址,new关键字使用后其实是在堆中创建了两个"奥里给!"对象,所以他们的内存地址是不同的,这个时候使用"=="判断会返回false。

而这里的equals()方法则是在String类中被重写过后的方法,感兴趣的小伙伴可以自行看看源码,大概说起来是这样:方法内部会先使用"=="进行判断,如果返回为false,会将两个字符串的长度进行比较,如果长度相同则会将两个字符串放入两个char[]数组进行数组每一位的比较。(可以理解为先进行"=="判断,如果返回false则进行值的比较),所以使用equals返回为true。

再举个栗子:

public class Test{
    public static void main(String[] args){
        String aa = "奥里给!";
        String bb = "奥里给!";
        System.out.println(aa == bb);
        System.out.println(aa.equals(bb));
    }
}

看看结果:

true
true

 解析:

这里没有使用new关键字,再创建aa对象时,JVM会在常量池中先寻找是否有相同值,如果没有就 新建一个,如果有就把他赋给当前对象引用。也就是说在这里aa和bb其实引用的是同一个常量,所以这里两个返回都为true。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值