java “equals”和“==”的区别

  1.     区别

    "equals" 和"=="这两个实际上都是都是比较物理地址,前者是方法后者是运算符;在比较对象时两者的比较结果都是false,重写后equals可以用于比较值;在比较String时可以理解为:“==”:比较地址;“equals”:比较值。

2.比较对象时(object)

            使用equals时涉及到hashcode码,所以需要对hashcode码做处理才能比较;Object类的hashcode返回的内存地址经过处理后的机构,由于每个对象的内存地址都不一样,所以hashcode码也不一样。

public class TextObject {
	public static void main(String [] args){
		Student stu1= new Student ("张三" ,20,10001);
		Student stu2= new Student ("张三" ,20,10001);
		
		//对象地址
		System.out.println(stu1);
		System.out.println(stu2.toString());
		//判断俩个是否相等         系统默认地址相等  我们改为某个主键相等
	        System.out.println(stu1.equals(stu2));//true	
                System.out.println(stu1==stu2);//永远 false
        }
}
class Student{
	public String name;
	public int age;
	public int id;
	 
	public Student(){
		
	}
	public Student(String name,int age,int id){
		this.name = name;
		this.age = age;
		this.id = id;
	}
	
	//重写Object
	public String toString() {
        //return getClass().getName() + "@" + Integer.toHexString(hashCode());
        return "姓名:"+this.name+"年龄:"+this.age +"学号:"+this.id;
	}
	//重写 equals
	public boolean equals(Object obj){
		if(this ==obj){
			return true;
		}else{
			if(obj instanceof Student){
				Student stu = (Student)obj;
				if(this.name.equals(stu.name)&&this.age==stu.age&&this.id==stu.id){
					   return true;
				}
			}else{
				return false;
			 }
		 }
		return false;
	}
	 public int hashCode(){
		return 0; 
	 }
}

3、比较字符串(string)

        String类的hashcode根据String类的包含的字符串的内容,根据一种特殊的算法返回哈希码,只要字符串所在的堆空间相同,返回的哈希码就相同。

public class Compare {
	public static void main(String[] args){
	
		String str1 = "aa";
		String str2 = "bb";
		String str3 = "aa";

                System.out.println(str1.hashCode());//3104
		System.out.println(str2.hashCode());//3136
		System.out.println(str3.hashCode());//3104
		
		System.out.println(str1==str2);//false 地址不同,值不同
		System.out.println(str1==str3);//true 地址相同(没有出现new关键字,内容又相同的,变量指向同一个值)
		
		System.out.println(str1.equals(str2));//false 值不同
		System.out.println(str1.equals(str3));//true 值相同
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值