InstanceOf在equals方法中使用存在的一个隐患

详细的讲解参考学长的两篇文章就ok了,写的相当详细,包括什么自反性对称性的。

Java 基础-hashCode方法

Java 基础-equals方法    


另外补充一点,我所使用的是Eclipse编译器,一般重写这两个方法我一般都是先自动生成代码,然后再根据实际情况添加对象的判断条件即可。例如这里有一个Person类:

public class Person {
	private String name;
	private int age;
	
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	
	
}

其中构造函数也是通过Alt+S+A自动生成的,关于Eclipse的一些小技巧可是参照我的另一篇文章:关于Eclipse的一些使用技巧

然后Alt+S+H就可以自动生成hashCode和equals方法:

public class Person {
	private String name;
	private int age;
	
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object 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;
	}
	
	
}
可以看到,自动生成的equals中需要名字和年龄都相同才返回true。如果我们仅仅是需要名字相同就判断相同的话就把
if (age != other.age)
			return false;

这段代码删掉就行了。


以上内容仅为个人观点,如有错误或者不当之处还望指出。

展开阅读全文

没有更多推荐了,返回首页