java:复写equals实例
class User
{
String name;
int age;
/*
*比较过程思路:
*1、两个对象指向位置相同,那么他们就相等,return后跳出函数,不再往下执行
*2、指向位置不同,有3情况
*a:这两对象类型相同,并且内容相同,也属于相等
*b:类型相同,内容不同,属于不等;
*c:类型不同,属于不等
*/
public boolean equals(Object obj){
//1、指向位置相同,指定同一对象
if(this == obj){
return true;
} //2、指向位置不同
//能调用这里的equals,肯定是生成了User对象的,所以this肯定是User类型
//判断obj是不是User类型,如果是就跟this为同一类型
boolean b =obj instanceof User;
if(b){
/*
*类型相同,obj为User类型,而跟this位置不同的对象(第1步已证明)
*obj来源可能是:
*User obj = new User();
*或
*Object obj =new Object(); //Object是 User的父类
*/ //obj向下转型为User对象,以便一定能调用User里面的值
User u =(User)obj;
//这里的equals是用name调用的(jdk里面String复写过的equals方法),不是当前类的equals
//基本数据类型用==比,引用数据类型用equals比
if(this.age == u.age && this.name.equals(u.name)){
return true; }else{
return false;
} }else
{
//类型不同,不是user对象,不等
return false;
} } }
class Test
{
public static void main(String args[]){
//测试一:同地址,相等
User u1 = new User();
User u2 = u1;
u1.name="sss";
boolean b = u1.equals(u2);
System.out.println(b); //测试二:地址不同,类型、内容相同,相等
User u3 = new User();
User u4 = new User();
u3.name="sss";
u4.name="sss";
boolean b2 = u3.equals(u4);
System.out.println(b2);
}
}
其他:
java:复写equals实例的更多相关文章
- java复写equals例子
public class users { String name; static int age; public boolean equals(Object obj) { if(this==obj){ ...
- 复写equals、hashCode和toString方法
equals.hashCode和toString 这三个方法都是object类的方法,由于所有的类都是继承这个类,所以每一个类都有这三个方法. 1.复写equals方法 原则: 首先,两个实例是相同的 ...
- Java:重写equals()和hashCode()
Java:重写equals()和hashCode() 1.何时需要重写equals() 当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念). 2.设计equals() [1]使用instan ...
- java中equals和hashCode方法随笔二
前几天看了篇关于java中equals和hashCode方法的解析 1.Object类中的equals方法和hashCode方法. Object类中的equals和hashCode方法简单明了,所有的 ...
- java中equals方法和==的用法
java中equals方法的用法以及==的用法(参考一)equals 方法是 java.lang.Object 类的方法.两种用法说明:(1对于字符串变量来说,使用“==”和“equals()”方法比 ...
- Java的equals方法实现及其细节
判断两个对象是否等价,是OOP编程中常见的需求(下面围绕Java来进行阐述). 考虑这样几种情况:通过某个特征值来判断两个对象是否“等价”,当这两个对象等价时,判断结果为true,否则结果为false ...
- Java的equals方法的使用技巧
Java的equals方法的使用技巧 1.业务场景: 在某个社交软件中,要求每个用户的用户名(name)必须独一无二,那么在每次增加新用户的时候,都要对该用户的注册名进行判断,如果当前用户名已经被占用 ...
- Java 类的实例变量初始化的过程 静态块、非静态块、构造函数的加载顺序
先看一道Java面试题: public class Baset { private String baseName = "base"; // 构造方法 public Baset() ...
- Java中equals与==和comparaTo的区别
一.先说说Java中equals和==的区别: Java中的数据类型,可分为两类: 1.基本数据类型(也叫原始数据类型) 八大基本数据类型 char byte short int long doubl ...
随机推荐
- 关键字 static
A. 面向过程: 1. 静态全局变量:在全局变量前,加上关键词static,该变量就被定义成为一个静态全局变量. 1.1. 特点: |该变量在全局数据区分配内存: |未经初始化的静态全局变量会被程序自 ...
- Tomcat虚拟目录的设置
在学习JSP/Servlet的过程中,配置Tomcat的虚拟目录可能是我们遇到的第一个比较麻烦的问题,说是麻烦是针对我们初学者而言,对于高手那都不是问题.反正我是弄了一天才配置好,发现网上给出的很多配 ...
- [设计模式]Netd中的命令设计模式
命令模式 有如下的角色: (1)调用者(invoker) (2)命令接收者(receiver) (3)客户端(client) (4)命令对象(command) public interface Com ...
- Linq to sql 接收存储过程返回的多个结果集
故事前提.......... 一.返回顺序结果集 存储过程实例 CREATE PROCEDURE MultipleResultTypesSequentially AS select * from pr ...
- JavaScript正则实战
*:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...
- php取整的几种方法
php取整的几种方式. floor 舍去法取整 语法格式:float floor ( float value )返回不大于value 的下一个整数,将value 的小数部分舍去取整.floor() 返 ...
- EditorLineEnds.ttr 受影响的D版本 Delphi 8-2010
http://stackoverflow.com/questions/25295980/delphi-2006-2010-error-cannot-create-file-c-users-admin- ...
- LeetCode之Single Number以及拓展
Problem 1:一个数组中有一个数字a只出现一次,其他数字都出现了两次.请找出这个只出现一次的数字? 考察知识点:异或运算 思路:比如数字 b^b = 0 a^0 = a 因此,可以将数组 ...
- 使用saltstack批量部署服务器运行环境事例——批量部署nagios客户端
之前关于搭建web服务器集群实验的这篇文章http://www.cnblogs.com/cjyfff/p/3553579.html中,关于如何用saltstack批量部署服务器这一点当时没有记录到文章 ...
- Linux下crontab详解
1.crond介绍 crond是Linux下的任务调度命令,让系统定期执行指定程序.crond命令每分钟都会检查是否有要执行的工作,若有要执行的程序便会自动执行. linux下任务调度工作主要分两类: ...