Java Object类的equals()方法

所有类都从Object类中继承了equals方法,Object类中equals方法源代码如下:

public boolean equals(Object obj)     {         return this == obj;     }

Object中的equals方法是直接判断this和obj本身的值是否相等,即用来判断调用equals的对象和形参obj所引用的对象是否是同一对象,所谓同一对象就是指内存中同一块存储单元,如果this和obj指向的是同一块内存对象,则返回true,如果this和obj指向的不是同一块内存,则返回false,注意:即便是内容完全相等的两块不同的内存对象,也返回false。

那么equals()方法与之前的“==”有什么区别呢?

在进行演示代码之前先来了解一下Java内存的主要划分,可以帮助我们更好地理解下面的实例演示。

Java虚拟机里的堆区要存放new出来的对象,栈区存放局部变量,而方法区包含了类的所有信息,包括所有的方法,静态变量,常量等。

通过以下实例我们来加深一下equals与,代码如下:

public class Equals{public static void main(String[] args){String s1="apple";String s2="apple";System.out.println(s1==s2);    //trueSystem.out.println(s1.equals(s2));    //equals比较的是内容,trueString s3=new String("apple");String s4=new String("apple");System.out.println(s3==s4);  //falseSystem.out.println(s3.equals(s4));  //true}}

从上面的实例可以看出,“==”比较的是两个引用的对象是否相等,而equals()方法比较的是两个对象的实际内容。我们结合上面的内存的划分来理解这个区别。

String str1=new String("apple");String str2=new String("apple");System.out.println(s3==s4);  //falseSystem.out.println(s3.equals(s4));  //true

上述几行代码内存分析如下图所示:

因为“==”比较的是两个引用的对象是否相等,从上图很容易看出来不等,所以System.out.println(s3==s4),结果为False;而equals()方法比较的是两个对象的实际内容,从图中可以看出s3和s4都指向apple,内容是相同的,所以System.out.println(s3.equals(s4)),结果为True。

再来看

String s1="apple";String s2="apple";

内存分析如下图:

很容易看出System.out.println(s1==s2)的结果为True。

原文地址:https://www.cnblogs.com/naihuangbao/p/9445027.html

时间: 2024-08-04 19:17:08

Java Object类的equals()方法的相关文章

Java Object类及其equals方法

基本概念: Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入: Object类是所有Java类的祖先.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法.可以使用类型为Object的变量指向任意类型的对象 equals()方法:比较两个对象是否同一       如果两个对象具有相同的类型以及相同的属性值,则称这两个对象相等.如果两个引用对象指的是同一个对像,则称这两个变量同一.Object类中定义的equa

Java:Object类的equals()方法 如何编写一个完美的equals()方法

一  代码实例: package freewill.objectequals;  /** * @author freewill * @see Core Java page161 * @desc getClass实现方式,另有instance of实现方式,根据不同场景使用. */  public class Employee {      private String name;      private int salary;      private String hireDay;     

Object类及equals()方法

1 ==  对于基本数据类型,根据两端的值来判断是否相等,即使两端的数据类型不同,也可以返回true.引用数据类型,比较引用变量类型的地址是否相等 2 equals()是比较引用类型变量是否相等,也是比较地址值 3 ctrl+shift+t 查看源码 package lianxi2; public class TestEquals { public static void main(String []args){ Department d1 = new Department(); Departm

【宋红康学习日记11】Object类与equals方法

1 == (1)当对象是基本数据类型时,比较值: (2)当对象是引用型时,比较的是地址值!!1 2 equals():只处理引用型数据:Object类中的equals方法依然比较的是地址值! 但在String,File,Date类重写了equals方法,比较的是值: 3 String类内存解析 Person p1=new Person("花花",20); Person p2=new Person("曹操",40); syso(p1==p2);//false syso

11.29_常见对象(Object类的equals()方法代码优化).avi

package cn.itcast_03; public class Student { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void

11.28_常见对象(Object类的equals()方法).avi

package cn.itcast_03; /* * public boolean equals(Object obj):指示其他某个对象是否与此对象"相等". * 这个方法,默认情况下比较的是地址值.比较地址值一般来说意义不大,所以我们要重写该方法. * 怎么重写呢? * 一般都是用来比较对象的成员变量值是否相同. * 重写的代码优化:提高效率,提高程序的健壮性. * 最终版: * 其实还是自动生成. (第一就是向下转型出现问题,demo转成Student),因此在向下转型的时候加入

java object类

java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. Object类是Java中唯一没有父类的类. 其他所有的类,包括标准容器类,比如数组,都继承了Object类中的方法. Object类中的方法 构造方法:public Object() 文档中的类概览: Java中的每个类都具有定义在Object类中的这些方法. protected Object clone() Cr

Java中Object类的公有方法

HashCode();wait();notify();equals();getClass();toString();clone();finalize(); 这里只是简单介绍一下其中的几个函数: HashCode(): * As much as is reasonably practical, the hashCode method defined by * class {@code Object} does return distinct integers for distinct * obje

JAVA之旅(九)——Object类,equals,toString,getClass,内部类访问规则,静态内部类,内部类原则,匿名内部类

JAVA之旅(九)--Object类,equals,toString,getClass,内部类访问规则,静态内部类,内部类原则,匿名内部类 天天被一些琐事骚扰,学习还得继续 一.Object类 Object是什么呢?我们可以翻阅JAVA API文档看他的介绍 上面介绍说,object是类层次结构的根类,也就是超类 Object:是所有对象的直接后者间继承关系,传说中的老祖宗,你父亲还有父亲,你父亲的父亲还有父亲是爷爷,这是继承关系,但是你的祖宗却只有一位,该类中定义的肯定是所有对象都具备的功能