== 和 equals()的区别

== 和 equals()的区别,第1张

== 和 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));
    }
}

看看结果:

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

解析:

这里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));
    }
}

看看结果:

 解析:

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5719803.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存