java 区别“==”和equals()方法

/*
Object是所有类的父类:
它有一个equals方法,这个方法是用来比较两个对象的引用是否相同,而不是比较对象内容是否相同。
"=="比较的是两个对象的引用,Object中的equals方法比较的也是两个对象的引用。所以在Object类中==和equals的作用是一样的。

所以在子类中一般会重写覆盖此equals方法,使得equals方法实现比较对象内容是否相同的功能。这时==和equals的功能就不一样了。
==还适用于比较对象引用,而equals是用于比较对象(具体来说是对象内容)

新定义类的对象一般要重写equals方法。

*/

class Demo
{
	private String name;
	Demo(String name)
	{
		this.name=name;
	}

	public boolean equals(Object obj)  //重写equals方法。
	{
		if(obj==null)
			return false;
		if(obj instanceof Demo)
		{
			Demo d=(Demo)obj;
			return this.name.equals(d.name);
		}
		return false;
	}

}

class EqualsTest
{
	public static void main(String[] args)
	{
		Demo d1=new Demo("Hello");
		Demo d2=new Demo("Hello");
		sop(d1==d2);
		sop(d1.equals(d2));

		String str1="Hello";
		String str2="Hello";
		String str3=new String("Hello");
		String str4=new String("Hello");

		sop(str1==str2);
		sop(str1.equals(str2));

		sop(str3==str4);//比较两个对象引用肯定是不一样的。
		sop(str3.equals(str4));//在String类中重写了Equals方法,比较的是引用指向的对象内容。

		sop(str1==str3);
		sop(str1.equals(str3));

		//System.out.println("Hello World!");
	}

	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}

时间: 2024-10-31 16:15:38

java 区别“==”和equals()方法的相关文章

【转】彻底弄懂Java中的equals()方法以及与"=="的区别

彻底弄懂Java中的equals()方法以及与"=="的区别 一.问题描述:今天在用Java实现需求的时候,发现equals()和“==”的功能傻傻分不清,导致结果产生巨大的偏差.所以,我决定花费时间把equals()和“==”的功能彻底弄懂,前事不忘后事之师嘛,分享给大家,希望对大家理解equals()和“==”的功能有所帮助. 二.分析探索解决问题的方法:1.Object 中的equals()方法: (1)通过查找API,说明如下: equalspublic boolean equ

java中‘==’和‘equals()’方法的有趣探索

这两天在看周志明的<深入理解java虚拟机>,受益颇多,根据书中的启示,对java中'=='和'equals()'方法的区别做了一些探索. 首先,为了更快地让进入状态,我们先来所几个判断题,例程如下,请判断各个System.out.println()输出的结果. <pre name="code" class="java"> public static void main(String[] args) { Integer a =1; Integ

如何重写Java中的equals方法

Java中,只有8种基本类型不是对象,例如:4种整形类型(byte, short, int,long),2种浮点类型(flout, double),boolean, char不是对象,其他的所有类型,不论是对象数组,列表等都扩展了Object类.了解学习Object中方法的设计原理和实现方式有助于更好的学习理解java语言.下面,我们首先学习一下Object中的equals方法. 判断两个对象相等时,JVM首先查找两个对象的hashCode, 如果两者hashCode不同,则返回false;如果

Java:自定义实现equals()方法

Java:自定义实现equals()方法 以常见的自定义Date类型为例,没有经验的朋友可能会觉得直接比较年月日即可,从而写出以下的实现 public class MyDate implements Comparable<MyDate> { private final int year; private final int month; private final int day; public MyDate(int year, int month, int day) { this.year

Java中“==”与equals方法的区别

1. 用“==”比较两个变量,如果两个变量是基本类型变量,且都是数值类,则值相等就返回true 如果两个变量是引用型变量,则两个对象的地址一样,即指向同一个对象,则返回true 2.equals:String类对equals进行了重写:1)若是同一个对象,返回true: 2)若不是,则比较它们的值,值相同,返回true 重写代码: public boolean equals(Object anObject) { if (this == anObject) { return true; } if

java中 == 和 equals()方法的区别

参考博客: 1.当要判断两个对象是否是相同时,可以重写equals()方法.....参考:   http://www.2cto.com/kf/201408/327873.html 2.具体 : http://www.cnblogs.com/zhxhdean/archive/2011/03/25/1995431.html 3.http://blog.csdn.net/xcysuccess3/article/details/6557771 主要注意的地方:String Integer等类的equal

浅谈java对象的equals方法

作为一个被问的很多的一个面试题:java中==和equals有什么区别? 网上普遍的回答都是:==比较的是内存地址,equals比较的是值. 其实这种回答是很不标准的,稍微标准一点的回答应该JDK自带的一些类对equals的实现各不同,例如 Object对象的equals的定义是这样的: public boolean equals(Object obj) { return (this == obj); } 所以在Object中==和equals是没有任何区别的. 但在String中,重写的equ

Java中==和equals方法的分析

原文引用https://www.dazhuanlan.com/2019/08/26/5d62fa816b34b/ 前言 == 和 equals是经久不衰的面试题,记得刚毕业的时候我也被问到过很多次,从最开始的一脸懵逼到最后的从容回答,本文我们就来分析下这两者之间的区别和联系. 为避免阅读疲劳,我这里先放上结论: 联系: 两者都被用来进行比较操作 当equals()未被重写时,两者的用途和比较的内容相同,即都是比较对象的引用地址是否相同 区别: ==既可以比较基本数据类型,亦可用在对象之间.equ

JAVA中重写equals()方法的同时要重写hashcode()方法

object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true:注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码.如下:(1)当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true (2)当obj1.ha