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. (转)Struts2返回JSON对象的方法总结

    转自:http://kingxss.iteye.com/blog/1622455 如果是作为客户端的HTTP+JSON接口工程,没有JSP等view视图的情况下,使用Jersery框架开发绝对是第一选 ...

  2. Begin using git

    First thing first, you can easily install git in all 3 mainstream OS, Windows, Linux, OSX. Get windo ...

  3. Swift学习(二)

    一.方法 在OC中,函数是C语言的形式,跟方法不一样 函数:int sum (int num1, int num2) { return num1 + num2;   } 方法:- (int)sum:( ...

  4. C++临时变量的生命周期

    C++ 中的临时变量指的是那些由编译器根据需要在栈上产生的,没有名字的变量.主要的用途主要有两类: 1) 函数的返回值, 如: string proc() { return string(" ...

  5. 设置Eclipse自动跳转到debug模式的小技巧

    默认情况下,eclipse中右键debug,当运行到设置的断点时会自动跳到debug模式下.但由于我的eclipse环境,从开始一直用到现在,中间包括装.卸各种插件,更换版本,从英文界面导到中文界面又 ...

  6. c programming language ___ 5_2.c

    #include <stdio.h> #include <ctype.h> #define BUG printf("here!bug!\n"); int g ...

  7. Java c3po

    1.准备通用类 (引用:c3p0-0.9.1.2.jar) package nankang.test; import java.sql.Connection; import com.mchange.v ...

  8. sqlca.sqlcode

    http://www.cppblog.com/prayer/archive/2009/06/03/86679.html        ======DB2 http://my.oschina.net/s ...

  9. 第六章_PHP数组

    1.PHP支持两种数组:索引数组(indexed array)和关联数组(associative array),前者使用数字作为键,后者使用字符串作为键. 2.遍历索引数组 2.1 for循环语句 2 ...

  10. C# 集合 — Hashtable 线程安全

    基础知识重要吗?真的很重要. 就在笔者与同事聊天中突然同事提出一个问题,让笔都有点乱了手脚(有点夸张),题目是这样的: 问:Hashtable 是线程安全的吗? 答:…… (沉默中,Yes Or No ...