==与equals

在C语言中,我们经常使用==判断两个参数是否相等,但是在java中,我们却不能乱用这个操作符,因为java中涉及很多类的操作,使用==也许表达的意思和程序员所想不一致。下面以一个例子来说明==和java中的equals函数的区别:

package Thinking;
class Text{
String text;
public Text(String text){
this.text=text;
}
}
public class Compare{
public static void main(String[] args){
int n=10;
int m=10;
System.out.println(n==m);
Text a=new Text("hust");
Text b=new Text("hust");
Text c=a;
String s1=new String("hust");
String s2=new String("hust");
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
System.out.println(a==b);
System.out.println(a.equals(b));
System.out.println(a==c);
System.out.println(a.equals(c));
System.out.println(a.hashCode());
System.out.println(b.hashCode());
System.out.println(c.hashCode());
}
}//output:
true
false
true
false
false
true
true
5184781
33311724
5184781

实际中,基本类型的比较使用的是“==”,只要值一样,结果就为true。虽然有些类对“==”进行了重载,但表达的意思不一样。众所周知,对类进行操作时都是引用变量,上述a和c指向同一个实例对象,而b虽然和a的内容一样,但不是同一个实例对象。
对象中“==”表示两者是否指向同一个对象,由于Text类并没有覆盖equals和hashcode方法。所以a.equals(b)和a==b的结果都是false,而String类覆盖了equals和hashcode方法,所以s1.equals(s2)为true,但两者毕竟指向不同对象,所以s1==s2为false。
通过上面的比较可以看出a.equals(c)为true,同时两者的hashcode也是一样,这是因为equals为true的两个类,两者的hashcode也是一样的。String类在覆盖equals函数时,同样覆盖了hashcode函数,这是基本要求。相等的两个类,hashcode同样相等,但反之则不然。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值