怎样写一个尽可能优雅的equals方法
来源:互联网 发布:广联达软件开发待遇 编辑:程序博客网 时间:2024/04/29 07:55
package com.amber.ivy;
/**
* 编写一个尽可能通用的equals方法
* @author ivyamber
*
*/
public class EqualsDemo {
public static void main(String[] args) {
Object ivy = new Person("ivy", 21);
Object amber = new Person("ivy", 21);
System.out.println(ivy.equals(amber));
}
}
/**
* 人类
* @author ivyamber
*
*/
class Person
{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean equals(Person obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
/**
* 编写一个尽可能通用的equals方法
* @author ivyamber
*
*/
public class EqualsDemo {
public static void main(String[] args) {
Object ivy = new Person("ivy", 21);
Object amber = new Person("ivy", 21);
System.out.println(ivy.equals(amber));
}
}
/**
* 人类
* @author ivyamber
*
*/
class Person
{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean equals(Person obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
如果人的名字和年纪一样我们就认为这是一个人(当然,这是不对的)。但是这个例子中,将返回false,因为其实Person类没有覆盖Object类的equals方法,所以ivy,amber是Object对象就会调用Object的equals方法。所以写equals方法第一点,覆盖Object方法,最好加一个@override以免覆盖出错。
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;//同一个引用一定是同一个对象
if (obj == null)//一定要保证obj不是null,否则下面会报错
return false;
if (getClass() != obj.getClass())//有人认为应该使用instanceof,getClass不符合置换规则。我是觉得如果相等的概念每个子类都不一样就用getClass 要是取决于父类就//用instanceof
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
0 0
- 怎样写一个尽可能优雅的equals方法
- 如何写一个正确的equals方法
- 怎样写一个好的方法
- java中写一个完美equals方法的建议
- 一个合格的equals方法
- 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
- 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
- equals方法覆写
- 覆写equals方法
- Octave 是写得很优雅的一个软件
- 如何优雅的写一个分页代码(三)
- 怎样正确改写Equals方法
- 怎样正确改写Equals方法
- 写一个函数,尽可能高效地从标准URL里取出文件的扩展名(新浪)
- python 试题:写一个类,并让它尽可能多的支持操作符。
- 如何写一个给自己的框架写一个优雅的Java Config模块(一)
- 如何写一个给自己的框架写一个优雅的Java Config模块(二)
- 如何写一个给自己的框架写一个优雅的Java Config模块(三)
- 欢迎使用CSDN-markdown编辑器
- Git常用命令以及用法
- java静态方法,静态初始化块及静态变量的声明和初始化不能使用泛型的原因
- JavaHost:使用虚拟DNS省掉开发环境配置hosts文件
- ios8 定位无效
- 怎样写一个尽可能优雅的equals方法
- 关于resize事件,不同浏览器的触发行为
- ******************** for循环 ********************
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
- iOS开发UI-利用Quartz2D 实现基本绘图(画三角形、矩形、圆、圆弧)
- Android Canvas绘图详解
- springmvc实现REST中的GET、POST、PUT和DELETE
- 数据结构--排序之插入排序
- Android学习笔记——AVD