重写equals方法判断条件使用“==”的情况

public class Test06{public static void main(String[] args){Student s1 = new Student("lisi");Student s2 = new Student("lisi");System.out.println(s1.name);System.out.println(s2.name);System.out.println(s1.equals(s2));Person p1 = new Person(new String("zhangsan"));Person p2 = new Person(new String("zhangsan"));System.out.println(p1.name);System.out.println(p2.name);System.out.println(p1.equals(p2));}
} class Student{String name;public Student(){}public Student(String name){this.name = name;}public boolean equals(Object obj){if(obj == null || !(obj instanceof Student)){return false;}if(obj == this){return true;}Student s = (Student)obj;return this.name.toString() == s.name.toString();//return this.name.equals(s.name);}
}class Person{String name;public Person(){}public Person(String name){this.name = name;}public boolean equals(Object obj){if(obj == null || !(obj instanceof Person)){return false;}if(obj == this){return true;}Person p = (Person)obj;return this.name.toString() == p.name.toString();//return this.name.equals(p.name);}
}

结果:

重写equals方法判断条件使用String的“equals方法”的情况

即上面代码注释部分使用,

结果

很奇怪为什么使用==这种方法是在new(“zhangsan”)时会出现这种情况。。

解决:

首先,看一下String类中对toString 和 equals方法的重写


接着看一下内存图,图和案例不一样,但不影响理解

至此问题解决
当然还是存在着疑惑:既然在String类中toString返回的是this,那么System.out.println(“zhangsan”);
打印输出的为何是zhangsan而不是this的内存地址。。。

判断两个学生类对象是否一致使用equals方法重写时判断条件使用“==”、“String自带的equals”不同所带来的问题相关推荐

  1. Python判断两个文件夹中互相不同的文件有哪些、判断一个文件夹相对于另外一个文件夹缺少了哪些文件

    Python判断两个文件夹中互相不同的文件有哪些.判断一个文件夹相对于另外一个文件夹缺少了哪些文件 目录 Python判断两个文件夹中互相不同的文件有哪些.判断一个文件夹相对于另外一个文件夹缺少了哪些 ...

  2. python类定义中、对象字符串的特殊方法是_python中自定义类对象json字符串化的方法_python json转字符串、...

    python中自定义类对象json字符串化的方法 1. 用 json 或者simplejson 就可以 2.定义转换函数: def convert_to_builtin_type(obj): prin ...

  3. php中获得上个月的同一时间,PHP判断两个给定日期是否在同一周的方法

    本文实例讲述了PHP判断两个给定日期是否在同一周的方法.分享给大家供大家参考,具体如下: /** * 判断两日期是不是同一周 * 星期是按周日到周六 */ function getSameWeek($ ...

  4. Python中用于判断两个集合的交集是否为空集isdisjoint()方法

    [小白从小学Python.C.Java] [Python全国计算机等级考试] [Python数据分析考试必会题] ​● 标题与摘要 Python中用于判断两个集合的交集是否为空集 isdisjoint ...

  5. python添加、修改、删除、访问类对象属性的2种方法

    1.直接添加.修改.删除.访问类对象属性 class Employee (object):empCount = 0 def __init__(self, name, salary) :self.nam ...

  6. 【MATLAB统计分析与应用100例】案例009:创建一个RandStream类对象,调用其randn方法生成标准正态分布随机数

    文章目录 1. 创建一个RandStream类对象s,其随机数生成器的算法为'mlfg6331_64',初始种子为10 2. 调用对象s的randn方法生成10行10列的随机数矩阵x,其元素服从标准正 ...

  7. Python - 一种一次性导出或修改所有类对象属性与值的方法

    原文 转载请注明出处:首发于CSDN 访问一个已知属性名的属性很简单,a.name就完事了,然而访问不知名的属性却相对麻烦(大概不会有码农不知道自己的类里都有什么属性吧).以防万一,写了一点东西提供一 ...

  8. 接口、抽象类、方法复写、类Equals方法重写

    接口: /** Java接口中的數據成員必須初始化,該成員有隱藏的final.satic.常量,* 一次賦值后不可在賦值* 成員方法訪問修飾符必須是公共修飾符,可以顯示聲明也可以不聲明* 成員方法必須 ...

  9. Python 类对象及属性内置方法 classmethod、delattr、dir、hasattr、getattr、callable

    1. classmethod classmethod 修饰符对应的函数不需要实例化,不需要 self 参数.第一个参数需要是表示自身类的 cls 参数,能调用类的属性.方法.实例等. class Pe ...

最新文章

  1. Tido 习题-二叉树-树状数组求逆序对
  2. Python2安装教程(以最终版本Python2.7.18为例)
  3. VC++ 利用PDB和dump文件定位问题并进行调试
  4. 避障机器人程序c语言,基于51单片机小车寻迹、避障源程序(注释很详细)
  5. 项目: 用c++写一个养成类的游戏【QQ宠物】
  6. JBoss AS7 JNDI和EJB 3.1命名更改
  7. 10067mysql_MYSQL数据库mysql Non-Transactional Database Only(只支持MyISAM)
  8. 使用Git子模块和开发模式管理Python项目
  9. 正则表达式 -- 个人笔记
  10. bzoj 4653: [Noi2016]区间(尺取+线段树)
  11. Python笔记(二)——python调用C/C++模块
  12. 尽在双11:阿里巴巴技术演进与超越
  13. AWS中国EC2 80端口无法访问
  14. 华为HG8347R V3R016C10S135光猫桥接 北京联通 恢复华为原版
  15. 字体设计符号组合多功能微信小程序源码
  16. 手机开发APP整体界面设计工具之墨刀---没用过就知道它很牛掰
  17. 基于matlab的动态心形图案
  18. 利用原生写js满天星星
  19. Angular2属性绑定
  20. 大部分前端都在用的 ES6 代码简化技巧,你都在用吗?

热门文章

  1. ArcGIS Engine开发之旅08--和查询相关的对象和接口
  2. Tomcat设置cmd窗口的title属性
  3. (zt)说说大型高并发高负载网站的系统架构
  4. final方法覆盖与重载问题以及不同访问权限问题
  5. 数据中台必备的4个核心能力,你让数据创造价值了吗?
  6. STM32之通用定时器输出比较模式
  7. 如何解决 IDEA 占用大量 CPU 导致的卡顿问题?这顿操作猛如虎
  8. 逼自己玩命学了3个多月,整理出了这份549个分支的技术脑图,分享给你
  9. 当初阿里巴巴、百度、美团都差点错过的架构,现在用起来真香!
  10. 如果面试官问你:Redis 内存满了怎么办?