equals与==区别

== : 如果比较的是基本数据类型,那么比较的是变量的
== :如果比较的是引用数据类型,那么比较的是地址值(两个对象是否指向同一块内存)
equals:如果没有重写equals方法比较的是两个对象的地址值。 如果重写了equals方法后我们往往比较的是对象中的属性的内容

 

一 、 java.lang.Object 中的 equals()方法:
   public boolean equals(Object obj) {
        return (this == obj);
     }
二、  像String,Date等系统类中已经重写了equals方法用来比较对象中的属性的内容。
 
三  一般我们自定义类中都会重写equals方法用来对属性的内容进行比较。
     如果没有重写equals方法那么调用的就是 Object中的equals方法用来比较两个对象的地址值。

 



我们比较无非就是这两种 1、基本数据类型比较 2、引用对象比较
  1、基本数据类型比较
  ==和Equals都比较两个值是否相等。相等为true 否则为false;
  
  2、引用对象比较
  ==和Equals都是比较栈内存中的地址是否相等 。相等为true 否则为false;






	1、string是一个特殊的引用类型。对于两个字符串的比较,不管是 == 和 Equals 这两者比较的都是字符串是否相同;
	2、当你创建两个string对象时,内存中的地址是不相同的,你可以赋相同的值。
   所以字符串的内容相同。引用地址不一定相同,(相同内容的对象地址不一定相同),但反过来却是肯定的;
 3、基本数据类型比较(string 除外) == 和 Equals 两者都是比较值;

 

 

 

/*
 * String 重写了equals方法 ;
 * ==比较两变量的内存地址
 *  
 */


class Studen{
	String name;
	int id;
	public Studen(String name, int id) {
		super();
		this.name = name;
		this.id = id;
	}
	public String toString() {
		return "姓名:"+name+" 学号:"+id;
	}
	public boolean equals(Object obj) {
		return super.equals(obj);
//		return true;
	}
}
public class equals和双等比较地址 {
	public static void main(String[] args) {
		Studen a = new Studen("小明 ",1);
		Studen b = new Studen("小明 ",1);
		System.out.println(a);
		System.out.println(b);
		System.out.println(a==b);
		System.out.println(a.equals(b));
		System.out.println("====================()");
		String c="hello";
		String d="hello";
		System.out.println(c);
		System.out.println(d);
		System.out.println(c==d);
		System.out.println(c.equals(d));
		
		System.out.println("==========");
		int e=6;
		int f=5;
		System.out.println(e==f);

	}

}




结果:
     姓名:小明  学号:1
姓名:小明  学号:1
false
false
====================()
hello
hello
true
true
==========
false

equals()本质上还是= = 只是很多类重写了equals()方法
       equals()默认使用的是引用比较,只是很多类重写了equals()让其变成了值比较,所以通常情况下equals()是值比较

*****两个对象的hashCode()相等 那么equals()一定为true吗?
hashCode()相等不一定为true,因为在散列表中,hashCode() 相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等

 

 

 

长篇大论的话,我这里就不多写了,相信大家入门java 的时候就知道个大概了,这里想表述的是,如果面试官问你《关于==和equals的区别》,该怎么回答完美呢?可以这样说

总结的来说:

  1)对于==,比较的是值是否相等

            如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;

    如果作用于引用类型的变量,则比较的是所指向的对象的地址

  2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象

    如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

    诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值