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); //true
System.out.println(s1.equals(s2)); //equals比较的是内容,true
String s3=new String("apple");
String s4=new String("apple");
System.out.println(s3==s4); //false
System.out.println(s3.equals(s4)); //true
}
}
从上面的实例可以看出,“==”比较的是两个引用的对象是否相等,而equals()方法比较的是两个对象的实际内容。我们结合上面的内存的划分来理解这个区别。
String str1=new String("apple");
String str2=new String("apple");
System.out.println(s3==s4); //false
System.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。
wx搜索“程序员考拉”,专注java领域,一个伴你成长的公众号!

Java Object类的equals()方法的更多相关文章
- Java Object类及其equals方法
基本概念: Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入: Object类是所有Java类的祖先.每个类都使用 Object 作为超 ...
- Object类及其equals()方法
== : 1.基本数据类型:根据基本数据类型的值判断是否相等,相等返回true,反之返回false 注意:两端数据类型可以不同, 在不同的情况下,也可以返回true 2.引用数据类型:Object ...
- object类的equals方法简介 & String类重写equals方法
object类中equals方法源码如下所示 public boolean equals(Object obj) { return this == obj; } Object中的equals方法是直接 ...
- Java:Object类的equals()方法 如何编写一个完美的equals()方法
一 代码实例: package freewill.objectequals; /** * @author freewill * @see Core Java page161 * @desc get ...
- Object 类的equals方法
Object 类中定义有: public boolean equals (Object obj)方法 提供对象是否“相等”的逻辑 Object 的equals方法定义为:x.equals(y)当x和y ...
- Object类—复写equals方法,hashCode方法,toString方法
Object:所有类的根类. Object是不断抽取而来,具备着所有对象都具备的共性内容. class Person extends Object { private int age; Person( ...
- Java Object类的toString()方法
Java只要定义一个类,那么它都在继承,没有说明它在继承哪个类的时候,则默认继承java.lang.Object类,也就是说Object类是所有类的父类.看下面一段代码. public class O ...
- Object类的equals方法 常用API
boolean equals (Object obj)(return this==obj): p1.equals(p2): 基本数据类型比较的是值 引用数据类型:默认比较的是两个对象的地址 ...
- Java Object类中toString方法的重写
Object类中的tostring方法的: 当我们输出一个对象时,实际是输出的是这个类中的tostring方法,是一个地址值,而不是类中的属性. 1 一:子类没有重写Object类中的toStrinn ...
随机推荐
- “全栈2019”Java第十六章:下划线在数字中的意义
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 使用 echart的jar包,传递到前台报 null错误
表现:后台创建 Option的JsonObjject传递到前台之后,失败,F12控制台报错:无法定义null的属性xxx 原因:使用jar包里面的对象分装没有默认值,而我们自己使用时只是对需要的对象进 ...
- Python脚本模板
1.Python脚本规范基础模板 #coding:utf8 import time, re, os, sys, time,urllib2,shutil,string import json,datet ...
- 动态渲染可编辑单元格的Table
一.问题描述 问题是这样的,后台传了xArr = [x1, x2,...,xn]和yArr = [y1, y2, ..yn]两个数组,前端要渲染出表格并且可以填写每个单元格的值,然后按照一定数据结构保 ...
- leetcode-575-Distribute Candies(计算一个数组中元素的种类的快速方法)
题目描述: Given an integer array with even length, where different numbers in this array represent diffe ...
- TCP/IP——何时用UDP代替TCP
UDP和TCP UDP和TCP都有其自身的特点,不同的应用场景和要求需要使用不同的协议来传输,那么何时我们可以用UDP代替TCP呢. UDP 的优点 UDP支持广播和多播,事实上如果应用程序使用广播或 ...
- php post get 繁体、日文、韩文时 自动添加 反斜杠 问题
做些二次开发项目,数据库.文件编码没法大规模的修改,比如二次开发一个日文系统,编码是JA16SJIS,$_POST或$_GET的信息中如果“申請”,得到的信息就会变成“申\請”,多出一个反斜杠! 先贴 ...
- 简述Dubbo
目前处于实习期间,白天工作,网上自主学习.最近没事逛了一下当前招聘网上的招聘要求,其中dubbo这个关键字出现的比较多,因此花了点时间学习了一番,在这写写自己的理解. 说起Dubbo,得先聊聊RPC, ...
- 4KM
ip addr add 10.9.8.100/24 broadcast + dev eth0 /etc/sysconfig/network-scripts/ifcfg-eth0 ifdown eth0 ...
- [转] git merge 将多个commit合并为一条之--squash 选项
[FROM] https://blog.csdn.net/themagickeyjianan/article/details/80333645 1.一般的做法(直接git merge) Git相对于C ...