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不相同");
}
}
}
分享到:
相关推荐
使用 @EqualsAndHashCode 注解,可以自动生成 equals(Object other) 和 hashCode() 方法,包括所有非静态变量和非 transient 变量。如果某些变量不想要加进判断,可以使用 exclude 排除,也可以使用 of 指定某些字段...
然而,这些类没有重写`equals()`方法,因此使用`equals()`来比较两个`Atomic`对象的值是没有意义的,因为这实际上是在比较对象引用而不是它们的内部值。 - **解决方案**:应当直接比较`Atomic`类的值,例如对于`...
其中的hashCode方法重写则参考了Netbeans中JavaBean转换器的写法。为保障原有代码安 全,通常更好的做法是将最终代码生成后拷贝到您的项目对应文件夹中。最好不要直接指 向您的项目文件夹,因为本工具会直接覆盖掉...
- **HashSet去重**:通过重写`hashCode()`和`equals()`方法,实现对象的唯一性。 8. **字典排序算法**:使用Tree数据结构(如TreeSet或TreeMap)进行排序,适用于需要保持元素顺序的场景。 9. **界面复用**: - ...
`String`类本质上是`Object`类的子类,继承了`Object`类的所有方法,如`equals()`、`toString()`、`hashCode()`等。同时,`String`类还提供了一些特定于字符串操作的方法,如`charAt()`、`substring()`等。 #### 10...
- **`&`**:位与运算符,在布尔表达式中也表示逻辑与,但不具有短路特性。 #### 14. `HashMap` 与 `Hashtable` - **`HashMap`**:非线程安全,允许一个键对应 null 值。 - **`Hashtable`**:线程安全,不允许键或...
它可以在开发阶段启用,以帮助调试和测试代码,但在生产环境中通常会被禁用以提高性能。 - 断言的语法有两种形式: - 简单断言:`assert 表达式;` - 扩展断言:`assert 表达式1 : 表达式2;` #### 八、GC(垃圾...
重写`equals()`时,应同时重写`hashCode()`以保持一致性。嵌套赋值应避免,以减少误解。 15. **编码规范**:数据库操作等需要关闭的对象应放入finally块中关闭。数组声明推荐使用`int[] index`。变量命名应避免使用...
- **继承**:匿名内部类可以继承一个父类,但在实际应用中通常不这么使用。 - **实现接口**:匿名内部类经常被用来实现接口,特别是在需要快速创建实现特定接口的对象时非常有用。 #### 3. 静态嵌套类 (Static ...
根据`Object`类中`equals()`方法和`hashCode()`方法的约定,如果两个对象通过`equals()`方法比较相等,则它们必须具有相同的哈希码。 **19. String对象是否可变?** 不是,`String`对象是不可变的,即一旦创建之后...
默认情况下,`equals`方法的行为与`==`相同,但很多类(如`String`)都重写了这个方法来比较实际内容。 3. **Math.round(12.5)等于多少?** - `Math.round(12.5)`的结果是12。`Math.round()`方法对于小数部分为0.5...
{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}...