1、“==” 和 equals() 区别?

1、“==” 和 equals() 区别?

1.1 使用场景不同

  • ==的使用场景:
    • 用于八种基本数据类型的比较,比较的是数据的是否相等。
    • 用于引用数据类型的比较,比较的是内存地址是否相等。
  • equals()的使用场景:
    • equals()方法是用于引用数据类型的比较,是在Object类中的方法,默认情况下,比较的是内存地址是否相等。
    • 我们会根据不同的使用条件,在其他地方进行equals()方法的覆写,如String类中就覆写了equals()方法,实现了字符串的比较。
      1.2 通过代码分析:

实例1:

public class JavaDemo {
    public static void main(String[] args) {
        int x = 10 ;			//定义基本数据类型;
        int y = 10 ;
        String strA = new String("hello");		//定义字符串对象。会开辟新的内存空间。
        String strB = new String("hello");
        
        //	1、==用于基本数据类型的比较时,比较数据的值;
        System.out.println(x == y);		
        
        //	2、==用于引用数据类型的比较时,比较的是数据的内存地址
        System.out.println(strA == strB);
        
        //	3、equels()方法对于引用数据类型的比较
        System.out.println(strA.equals(strB));
    }
}

程序执行结果:
true (用 ==判断 x 和 y 的数据值相同)
false (用 ==判断 strA和strB的内存地址不同)
false (用 equals()判断 strA和strB的内存地址不同)

实例2:

public class JavaDemo {
    public static void main(String[] args) {
        String strC = "hello" ;
        String strD = "hello" ;
        System.out.println(strC == strD);
        System.out.println(strC.equals(strD)) ;
    }
}

程序执行结果:

true

true

在这里之所以strC strD 相等的原因在于引入字符串常量池的概念。程序在执行strC = "hello" ; 时,如果常量池中没有"hello"对象,那么就会在常量池中创建一个"hello"对象,当strD = "hello" ; 执行的时候,发现常量池中就不会开辟新内存空间,直接从常量池中获取,导致strC strD 的内存地址相同。即使用“==”判断也依旧为true。

但是值得我们注意的是,System.out.println(strC.equals(strD)) ; 执行的结果是true,然而它并不是像之前一样去判断strCstrD 的内存地址,而是对于字符串内容的判断。这是因为我们之前提到过的,在String类中,覆写了Object父类的equals()方法(同时也覆写了hashcode() 方法),方便我们对于字符串的比较。

之所以出现上述两个实例的原因,同时也和String 类的两种实例化方法有关,想要更深入的理解这个问题,可以对相关知识点进行复习(只针对像我一样的菜鸟)

注:如果文中有什么错误,希望各位大佬和小伙伴们不吝赐教,同时有什么地方需要改进,也希望各位能够提出宝贵的意见。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值