`

equals与hashCode在实际开发中的重写写法

 
阅读更多
package com.tarena.corejava.day10;
/**
 * 该类展示equals/hashCode两个方法的实际开发中的标准写法
 * @author Administrator
 *
 */
public class TestEqualsHashCode {
    private int id;
    private String name;
    
    
	public TestEqualsHashCode(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	@Override
	public boolean equals(Object obj) {
		if(obj == null) return false;
		if(this.getClass()==obj.getClass()){//利用反射取确切的类型
			TestEqualsHashCode tec = (TestEqualsHashCode)obj;
			return tec.id == this.id;//比较基本数据类型用==
			//return tec.name.equals(this.name);//比较引用类型用equals
		}
		return false;
	}

	@Override
	public int hashCode() {
		int type = this.getClass().hashCode();
		int code = type*31+id;
		System.out.println("Hash码"+code);
		return code;
		//return type*31 +name.hashCode();//返回引用类型的hashCode的方法,引用.hashCode
	}
	
	public static void main(String[] args) {
		TestEqualsHashCode tec1 = new TestEqualsHashCode(1,"alpha");
		TestEqualsHashCode tec2 = new TestEqualsHashCode(2,"jack");
		TestEqualsHashCode tec3 = new TestEqualsHashCode(1,"alpha");
		System.out.println(tec1.equals(tec2));
		System.out.println(tec1.equals(tec3));
		
		if(tec1.hashCode() == tec2.hashCode()){
			System.out.println("hashCode相同");
		  }else{
			  System.out.println("hashCode不相同");  
		  }	
	}
	
}

 

分享到:
评论

相关推荐

    Lombok快速入门及使用详情

    使用 @EqualsAndHashCode 注解,可以自动生成 equals(Object other) 和 hashCode() 方法,包括所有非静态变量和非 transient 变量。如果某些变量不想要加进判断,可以使用 exclude 排除,也可以使用 of 指定某些字段...

    sonar检查规则指南

    然而,这些类没有重写`equals()`方法,因此使用`equals()`来比较两个`Atomic`对象的值是没有意义的,因为这实际上是在比较对象引用而不是它们的内部值。 - **解决方案**:应当直接比较`Atomic`类的值,例如对于`...

    POJOGenerator v1.3.3 Install(可视化POJO代码生成器最终版)

    其中的hashCode方法重写则参考了Netbeans中JavaBean转换器的写法。为保障原有代码安 全,通常更好的做法是将最终代码生成后拷贝到您的项目对应文件夹中。最好不要直接指 向您的项目文件夹,因为本工具会直接覆盖掉...

    算法篇章1

    - **HashSet去重**:通过重写`hashCode()`和`equals()`方法,实现对象的唯一性。 8. **字典排序算法**:使用Tree数据结构(如TreeSet或TreeMap)进行排序,适用于需要保持元素顺序的场景。 9. **界面复用**: - ...

    Java面试题

    `String`类本质上是`Object`类的子类,继承了`Object`类的所有方法,如`equals()`、`toString()`、`hashCode()`等。同时,`String`类还提供了一些特定于字符串操作的方法,如`charAt()`、`substring()`等。 #### 10...

    java内容集合

    - **`&`**:位与运算符,在布尔表达式中也表示逻辑与,但不具有短路特性。 #### 14. `HashMap` 与 `Hashtable` - **`HashMap`**:非线程安全,允许一个键对应 null 值。 - **`Hashtable`**:线程安全,不允许键或...

    值得一看的java面试题

    它可以在开发阶段启用,以帮助调试和测试代码,但在生产环境中通常会被禁用以提高性能。 - 断言的语法有两种形式: - 简单断言:`assert 表达式;` - 扩展断言:`assert 表达式1 : 表达式2;` #### 八、GC(垃圾...

    java编码规范考试题答案.docx

    重写`equals()`时,应同时重写`hashCode()`以保持一致性。嵌套赋值应避免,以减少误解。 15. **编码规范**:数据库操作等需要关闭的对象应放入finally块中关闭。数组声明推荐使用`int[] index`。变量命名应避免使用...

    java面试宝典

    - **继承**:匿名内部类可以继承一个父类,但在实际应用中通常不这么使用。 - **实现接口**:匿名内部类经常被用来实现接口,特别是在需要快速创建实现特定接口的对象时非常有用。 #### 3. 静态嵌套类 (Static ...

    java面试题大全好多经典的试题

    根据`Object`类中`equals()`方法和`hashCode()`方法的约定,如果两个对象通过`equals()`方法比较相等,则它们必须具有相同的哈希码。 **19. String对象是否可变?** 不是,`String`对象是不可变的,即一旦创建之后...

    IT java 面试题库

    默认情况下,`equals`方法的行为与`==`相同,但很多类(如`String`)都重写了这个方法来比较实际内容。 3. **Math.round(12.5)等于多少?** - `Math.round(12.5)`的结果是12。`Math.round()`方法对于小数部分为0.5...

    Java学习笔记-个人整理的

    {2.2.2}方法重写/覆盖}{50}{subsection.2.2.2} {2.3}修饰符}{51}{section.2.3} {2.4}父类对象的方法调用}{51}{section.2.4} {2.5}封装}{52}{section.2.5} {2.6}多态}{53}{section.2.6} {2.7}Sample code}{54}...

Global site tag (gtag.js) - Google Analytics