==和equals的区别

在初学java的时候,经常要用到数字类型数据对比,以及String对象的对比:

  • ·对于数字类型的数据,我们直接用 “==”。
  • 而对于String类型的数据的时候则用equals()方法进行比较。

在学习集合中的HashSet时,该集合要求我们重写两个方法,一个是HashCode()方法,另一个就是equals()方法。由此我们初步了解到了equals()方法具体的逻辑。


下面了解两个判断方式的区别:

1. “ == ”符号

在我们日常编程中,常常要用到各种数据比较,在比较byte,short,char,int,long,float,double,boolean 等数据类型的时候一般用“==”符号直接进行比较。对于这些类型数据用 ==号比较时,实际上是直接比较的是他们的值。

int num = 1;
int count = 1;
if(num==count){
       System.out.println("相等");
}else{
      System.out.println("不相等");
}
//输出结果:相等

我们通过“ == ”很容易就可以得到想要的效果。


2. equals()方法

在我们用“ == ”符号直接比较String类型的时候,得到的结果往往出乎我们的意料。

比如:

String str1 =  "字符串";
String str2 =  "字符串";
if(str1==str2){
      System.out.println("字符串相等");
}else{
      System.out.println("字符串不相等");
}
//输出结果:字符串不相等

以前就有这个疑问,str1跟str2的值明明相等,为啥比较的结果却是不同呢,其实我们使用“ == ”号对String这种复合数据类型的数据进行比较的时候,实际上比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,比较结果才会为true,才会输出“字符串相等”,否则都是false,输出“字符串不相等”。

而使用equals()方法进行比较:

String str1  =  "字符串";
String str2  =  "字符串";
if(str1.equals(str2)){
      System.out.println("字符串相等");
}else{
      System.out.println("字符串不相等");
}
//输出结果为:字符串相等

实际上,java中所有的类都继承于Object这个基类,而Object的基类中定义了equals这个方法,就是用来比较类是否相等的,这个方法使得不管什么数据类型都能通过重写该方法而实现值的比较。

在HashSet集合中,是不允许添加重复数据的,在添加重复数据时会无法添加,原因是在添加数据时,HashSet类会调用它的HashCode方法查找哈希值,若哈希值不存在集合中则直接添加数据,若哈希值存在集合中,则会调用equals方法,判定元素的值是否一致,而对比的值的方法equals,我们可以设定只对比类的ID属性,也可以所有属性都进行对比,按照实际情况对方法进行重写。

如果不对该方法进行重写,这个方法的初始行为也是比较对象的内存地址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了,在我们用equals对String进行比较的时候,String类中equals方法自身的实现则是比较字符串值是否一样,所以我们可以在不重写的情况下得到想要的效果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值