判断两个学生类对象是否一致使用equals方法重写时判断条件使用“==”、“String自带的equals”不同所带来的问题
重写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”不同所带来的问题相关推荐
- Python判断两个文件夹中互相不同的文件有哪些、判断一个文件夹相对于另外一个文件夹缺少了哪些文件
Python判断两个文件夹中互相不同的文件有哪些.判断一个文件夹相对于另外一个文件夹缺少了哪些文件 目录 Python判断两个文件夹中互相不同的文件有哪些.判断一个文件夹相对于另外一个文件夹缺少了哪些 ...
- python类定义中、对象字符串的特殊方法是_python中自定义类对象json字符串化的方法_python json转字符串、...
python中自定义类对象json字符串化的方法 1. 用 json 或者simplejson 就可以 2.定义转换函数: def convert_to_builtin_type(obj): prin ...
- php中获得上个月的同一时间,PHP判断两个给定日期是否在同一周的方法
本文实例讲述了PHP判断两个给定日期是否在同一周的方法.分享给大家供大家参考,具体如下: /** * 判断两日期是不是同一周 * 星期是按周日到周六 */ function getSameWeek($ ...
- Python中用于判断两个集合的交集是否为空集isdisjoint()方法
[小白从小学Python.C.Java] [Python全国计算机等级考试] [Python数据分析考试必会题] ● 标题与摘要 Python中用于判断两个集合的交集是否为空集 isdisjoint ...
- python添加、修改、删除、访问类对象属性的2种方法
1.直接添加.修改.删除.访问类对象属性 class Employee (object):empCount = 0 def __init__(self, name, salary) :self.nam ...
- 【MATLAB统计分析与应用100例】案例009:创建一个RandStream类对象,调用其randn方法生成标准正态分布随机数
文章目录 1. 创建一个RandStream类对象s,其随机数生成器的算法为'mlfg6331_64',初始种子为10 2. 调用对象s的randn方法生成10行10列的随机数矩阵x,其元素服从标准正 ...
- Python - 一种一次性导出或修改所有类对象属性与值的方法
原文 转载请注明出处:首发于CSDN 访问一个已知属性名的属性很简单,a.name就完事了,然而访问不知名的属性却相对麻烦(大概不会有码农不知道自己的类里都有什么属性吧).以防万一,写了一点东西提供一 ...
- 接口、抽象类、方法复写、类Equals方法重写
接口: /** Java接口中的數據成員必須初始化,該成員有隱藏的final.satic.常量,* 一次賦值后不可在賦值* 成員方法訪問修飾符必須是公共修飾符,可以顯示聲明也可以不聲明* 成員方法必須 ...
- Python 类对象及属性内置方法 classmethod、delattr、dir、hasattr、getattr、callable
1. classmethod classmethod 修饰符对应的函数不需要实例化,不需要 self 参数.第一个参数需要是表示自身类的 cls 参数,能调用类的属性.方法.实例等. class Pe ...
最新文章
- Tido 习题-二叉树-树状数组求逆序对
- Python2安装教程(以最终版本Python2.7.18为例)
- VC++ 利用PDB和dump文件定位问题并进行调试
- 避障机器人程序c语言,基于51单片机小车寻迹、避障源程序(注释很详细)
- 项目: 用c++写一个养成类的游戏【QQ宠物】
- JBoss AS7 JNDI和EJB 3.1命名更改
- 10067mysql_MYSQL数据库mysql Non-Transactional Database Only(只支持MyISAM)
- 使用Git子模块和开发模式管理Python项目
- 正则表达式 -- 个人笔记
- bzoj 4653: [Noi2016]区间(尺取+线段树)
- Python笔记(二)——python调用C/C++模块
- 尽在双11:阿里巴巴技术演进与超越
- AWS中国EC2 80端口无法访问
- 华为HG8347R V3R016C10S135光猫桥接 北京联通 恢复华为原版
- 字体设计符号组合多功能微信小程序源码
- 手机开发APP整体界面设计工具之墨刀---没用过就知道它很牛掰
- 基于matlab的动态心形图案
- 利用原生写js满天星星
- Angular2属性绑定
- 大部分前端都在用的 ES6 代码简化技巧,你都在用吗?