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:String使用equals和==比较的区别

java:复写equals实例的更多相关文章

  1. java复写equals例子

    public class users { String name; static int age; public boolean equals(Object obj) { if(this==obj){ ...

  2. 复写equals、hashCode和toString方法

    equals.hashCode和toString 这三个方法都是object类的方法,由于所有的类都是继承这个类,所以每一个类都有这三个方法. 1.复写equals方法 原则: 首先,两个实例是相同的 ...

  3. Java:重写equals()和hashCode()

    Java:重写equals()和hashCode() 1.何时需要重写equals() 当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念). 2.设计equals() [1]使用instan ...

  4. java中equals和hashCode方法随笔二

    前几天看了篇关于java中equals和hashCode方法的解析 1.Object类中的equals方法和hashCode方法. Object类中的equals和hashCode方法简单明了,所有的 ...

  5. java中equals方法和==的用法

    java中equals方法的用法以及==的用法(参考一)equals 方法是 java.lang.Object 类的方法.两种用法说明:(1对于字符串变量来说,使用“==”和“equals()”方法比 ...

  6. Java的equals方法实现及其细节

    判断两个对象是否等价,是OOP编程中常见的需求(下面围绕Java来进行阐述). 考虑这样几种情况:通过某个特征值来判断两个对象是否“等价”,当这两个对象等价时,判断结果为true,否则结果为false ...

  7. Java的equals方法的使用技巧

    Java的equals方法的使用技巧 1.业务场景: 在某个社交软件中,要求每个用户的用户名(name)必须独一无二,那么在每次增加新用户的时候,都要对该用户的注册名进行判断,如果当前用户名已经被占用 ...

  8. Java 类的实例变量初始化的过程 静态块、非静态块、构造函数的加载顺序

    先看一道Java面试题: public class Baset { private String baseName = "base"; // 构造方法 public Baset() ...

  9. Java中equals与==和comparaTo的区别

    一.先说说Java中equals和==的区别: Java中的数据类型,可分为两类: 1.基本数据类型(也叫原始数据类型) 八大基本数据类型 char byte short int long doubl ...

随机推荐

  1. 【原】GO 语言常见错误

    1. Scan error on column index 4: converting string "" to a int: strconv.ParseInt: parsing ...

  2. poj 2154 Color

    这是道标准的数论优化的polya题.卡时卡的很紧,需要用int才能过.程序中一定要注意控制不爆int!!!我因为爆intWA了好久=_=…… 题目简洁明了,就是求 sigma n^gcd(i,n):但 ...

  3. iOS 简单总结:description方法\NSLog函数

    1.description方法是NSObject自带的方法,包括类方法和对象方法 + (NSString *)description; // 默认返回 类名 - (NSString *)descrip ...

  4. [OC] UITabBarController

    1. New CocoaTouch class -> Select Objective C -> named RootViewController 2. Disable APC error ...

  5. 记一个JAVA关于日期的坑

    JAVA解析日期格式代码,之前一直写成:“yyyy-MM-dd hh:mm”,比如"2016-01-18 11:00"."2016-01-18 15:00"都可 ...

  6. Spark Streaming揭秘 Day18 空RDD判断及程序中止机制

    Spark Streaming揭秘 Day18 空RDD判断及程序中止机制 空RDD的处理 从API我们可以知道在SparkStreaming中,对于RDD的操作一般都是在foreachRDD和Tra ...

  7. 《WPF程序设计指南》读书笔记——第7章 Canvas

    1.Canvas面板 using System; using System.Windows; using System.Windows.Controls; using System.Windows.M ...

  8. 2016 Multi-University Training Contest 1 Necklace 环排+二分匹配

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5727 题意:由2*N颗宝石构成的环(阴阳宝石均为N颗且标号均从1~N) 之后给定M组 a,b;表示阳宝石a ...

  9. raise_application_error用法

    我们经常通过dbms_output.put_line来输出异常信息,但有时需要把异常信息返回给调用的客户端.此时我们用raise_application_error,允许用户在pl/sql中返回用户自 ...

  10. 【iOS】init,loadView,viewDidLoad加载关系

    一.loadView 永远不要主动调用这个函数.view controller会在view的property被请求并且当前view值为nil时调用这个函数.如果你手动创建view,你应该重载这个函数. ...