equals函数在Object类当中,而Object类是所有类的父类,所以所有的类里面都有equals函数。

“==”操作符之前用于比较两个基本数据类型的值是否相等,而对于引用数据类型,“==”操作符用于判断两个引用是否指向堆内存中的同一个对象。

class User{
	String name;
	int age;
}
class Test{
	public static void main(String args[]){
		User u1 = new User();
		User u2 = new User();
		User u3 = u1;
		boolean b1 = u1 == u2;
		boolean b2 = u1 == u3;
		System.out.println(b1);
		System.out.println(b2);
	}
}

equals函数用来比较两个对象的内容是否相等

对象的内容相等通常需要满足下面两个条件:

1、对象的类型相同(用instanceof比较)

2、两个对象的成员变量的值完全相同

Object函数中的equals方法:

class Test{
	public static void main(String args[]){
		User u1 = new User();
		User u2 = new User();
		User u3 = u1;
		boolean b1 = u1.equals(u3);
		System.out.println(b1);
	}
}

通过对比我们发现调用Object的equals方法和使用“==”比较两个对象是否相等没有区别,所以我们需要根据上述两个条件复写equals方法

class User{
	String name;
	int age;

	public boolean equals(Object obj){
		if(this == obj){
			return true;
		}
		boolean b = obj instanceof User;
		if(b){
			User u = (User)obj;
			if(this.age == u.age && this.name.equals(u.name)){
				return true;
			}
			else{
				return false;
			}
		}
		else{
			return false;
		}
	}
}

首先判断this和obj是否指向堆内存中的同一个对象,是的话就返回true,再判断obj是不是User类型的,不是的话返回false,是的话就进行向下转型,再比较this和u的成员变量是否相等。
基本数据类型的成员变量比较使用"==",引用数据类型的成员变量比较用equals

class Test{
	public static void main(String args[]){
		User u1 = new User();
		User u2 = new User();
		User u3 = new User();
		u1.name = "zhangsan";
		u1.age = 12;
		u2.name = "lisi";
		u2.age = 13;
		u3.name = "zhangsan";
		u3.age = 12;
		System.out.println(u1.equals(u2));
		System.out.println(u1.equals(u3));
	}
}

equals函数的更多相关文章

  1. Practical JAVA(二)关于对象的类型和equals函数

    Practice5,6,9,10,11,12,13,14,15 ==判断等号两边两个变量储存的值是否相同,如果是两个对象,则判断两个变量储存的对象地址是否相同. 大多数时候,我们需要判断的不是左右两个 ...

  2. equals函数的作用

    1.equals函数在什么地方 在Object类中,写法与==一样,但是我们用的时候要重写这个equals方法 String类型中的equals是复写好的 2.equals函数的作用 ==号在比较两个 ...

  3. java中的==操作符和equals函数

    基本规则 “==”操作符的使用需要分成两种情况 判值类型相等 这一点很好理解,两个值类型代表的数值相等,则“==”表达式返回true “==”可以用与不同值类型的比较,语言会自动进行类型转换 判引用类 ...

  4. C# GetHashCode、Equals函数和键值对集合的关系

    C# GetHashCode.Equals函数和键值对集合的关系 说明 HashCode:Hash码.特性:两个值,相同的的值生成的Hash肯定相同,Hash不同的值肯定不同. 下面一张图中,只有和“ ...

  5. java自定义equals函数和hashCode函数

    所有类都继承自Object类,他所有的非final方法:equals,hashCode, toString, clone 和 finalize,它们都有通用约定. 我们在覆盖这些方法的时候需要遵循这些 ...

  6. java类的equals()函数和hashCode()函数用法

    以前总觉得java类对象很简单,但是今天的一个同事的点播,让我对java的对象有了不一样的理解,下面我来介绍一下equals()和hashCode()的用法: 先粘一段代码: public class ...

  7. 第38节:hashCode()与toString()与equals()函数的作用,内部类和匿名内部类

    hashCode()和toString() Hash算法是把任意长度的数据通过hash算法成为散列值 hashCode() public int hashCode(){ int result = 10 ...

  8. 【Java】整理关于java的String类,equals函数和比较操作符的区别

    初学 Java 有段时间了,感觉似乎开始入了门,有了点儿感觉但是发现很多困惑和疑问而且均来自于最基础的知识折腾了一阵子又查了查书,终于对 String 这个特殊的对象有了点感悟大家先来看看一段奇怪的程 ...

  9. Java hashCode() 和 equals()的若干问题

    原文:http://www.cnblogs.com/skywang12345/p/3324958.html 本章的内容主要解决下面几个问题: 1 equals() 的作用是什么? 2 equals() ...

随机推荐

  1. [翻译]你不会想知道的kobject,kset,和ktypes

    ---------------------------------------------------------------------------------------------------- ...

  2. 慕课网-安卓工程师初养成-2-9 Java中的自动类型转换

    来源:http://www.imooc.com/code/1236 在 Java 程序中,不同的基本数据类型的数据之间经常需要进行相互转换.例如: , 代码中 int 型变量 score1 可以直接为 ...

  3. css各兼容应该注意的问题

    1.div布局在ie浏览器和chrome浏览器,firefox浏览器不同,不如在div里面嵌套3个div,分别左中右,左边div的pading和margin在ie8以上都是几乎相同,ie8以下做内边距 ...

  4. 洛谷P1518 两只塔姆沃斯牛 The Tamworth Two

    P1518 两只塔姆沃斯牛 The Tamworth Two 109通过 184提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交  讨论  题解 最新讨论 求数据 题目背景 题目描 ...

  5. 华为OJ平台——统计字符串中的大写字母

    题目描述: 统计字符串中的大写字母的个数 输入: 一行字符串 输出: 字符串中大写字母的个数(当空串时输出0) 思路: 这一题很简单,直接判断字符串中的每一个字符即可,唯一要注意的一点是输入的字符串可 ...

  6. C# 操作XML 如果不存在创建 存在直接追加

    #region 写操作日志----------------这种格式 //<Log 操作人="Admin" 操作结果="成功" 结果详情="数据导 ...

  7. iface eth0 inet dhcp

  8. php 单例设计模式 example

    <?php class User { //静态变量保存全局变量 private static $_instance=null; //私有化构造函数,防止外界实例化对象 private funct ...

  9. oracle 游标示例

    declare iCount int:=0; sPath nvarchar2(200); tdzsh nvarchar2(50);begin for x in (select c.imgpath fr ...

  10. 实现MySQL的Replication

    实现MySQL的Replication     实现MySQL的Replication在MySQL 3.23.15版本之后,MySQL提供了数据库复制的功能,可以实现两个数据库实时同步,增强了MySQ ...