`

equals(Object obj);hashCode();toString();

JDK 
阅读更多
在JAVA中默认的2个方法,equals(Object obj)与hashCode();

首先:



hashCode()则是返回对象的散列码。

而toString()方法责是返回getClass().getName() + '@' + Integer.toHexString(hashCode())



比如有如下代码:

package com.generic;

public class Test<E> {
	
	private E name;
	
	Test(E setName){
		name=setName;
	}
	
	public void display(){
		System.out.println(name);
	}
	
}



package com.generic;

public class TestGeneric {
  public static void main(String[] args) {
  Test<String> t1=new Test<String>("Hello");

  System.out.println(t1.hashCode());
  System.out.println(t1.toString());
}
}


按道理来说,同一个对象的散列码应该是相同的,但是JDK的输入却是:

12677476
com.generic.Test@c17164

这里注意了,不要被假象所迷惑了,System.out.println(t1.toString());输出的是是getClass().getName() + '@' + Integer.toHexString(hashCode())这里的散列码被转型成了十六位进制来表示了。修改以上代码:

System.out.println(Integer.valueOf(t1.toString().substring(17),16).toString());


现在JDK输出:

33263331
33263331

散列码小补课:

在一个序列中查找一个特殊的对象所需要的时间取决于容器中对象的数量。如果我们没有对容器中元素进行排序,那么随着元素数量的增加,你所需要的查找时间也就直线增加了:如果容器中元素的数量增加了一倍,那么你用来查找一个特殊元素的时间也就增加了一倍。然而,如果我们对容器中的元素进行了排序,那么查找时间就是随着元素数量的对数而增加的了:要使查找一个元素的时间增加一倍,你必须使集合中的元素数量增加四倍。如果你用一个key来搜索对象,你可以用比序列式容器更好的方法来存储你的对象。你可以用哈希表(hash table)。我觉得哈希表作用就是快速搜索对象。
代码片断:
Hashtable hashtable = new Hashtable();//创建一个哈希表
            hashtable.Add("1", "11");//添加键名和值 hashtable.Add(键名, 值);键名是唯一的,不能重复。键名和值都可以是值类型,也可以是对象。
            hashtable.Add("2", "22");
            hashtable.Add("3", "33");
            hashtable.Add("4", "44");
            hashtable.Add("5", "55");
            hashtable.Add("6", "66");
            hashtable.Add("7", "77");

            string s = hashtable["1"].ToString();

s="11";

小补课内容来自:http://zhidao.baidu.com/question/37370523.html


在JAVA默认实现中,任何2个不同的对象都不是等价的,因为JAVA默认的equals(Object obj) 方法是根据散列码来判断的,2个不同对象的散列码不可能相同。所以,如果你要变换这种默认的方式,那么你必须手写满足自己要求的equals(Object obj)方法,不要去使用JAVA类库中自带的方法。

分享到:
评论

相关推荐

    学习Object类——为什么要重写equeals和hashcode方法

    此外,Object 类的设计是为了扩展,它提供了一些非 final 方法,如 equals、hashCode、toString、clone 和 finalize,这些方法都有通用的约定,需要在子类中被覆盖(override)。如果不遵守这些约定,依赖这些约定的...

    java中Hashcode的作用.docx

    3. 如果两个对象根据equals(Object o)方法是不相等的,则调用这两个对象中任一个对象的hashCode方法,不要求产生不同的整数结果。但如果能不同,则可能提高散列表的性能。 Hashcode和equals方法的关系 Hashcode和...

    java中重写equals()方法的同时要重写hashcode()方法(详解)

    public boolean equals(Object obj) { if (obj instanceof Name) { Name name = (Name) obj; return (id.equals(name.id)); } return super.equals(obj); } public int hashCode() { return id.hashCode()...

    findbug分析

    if (str.equals(obj.toString())) { // ... } ``` ##### 2. IM_BAD_CHECK_FOR_ODD: 不适用于负数的奇偶性检查 - **Pattern ID**: IM_BAD_CHECK_FOR_ODD - **Type**: IM - **Category**: STYLE **解释**:如果一...

    java-object类

    2. **提供通用方法**:`Object` 类定义了一些非常重要的方法,如 `equals()`、`hashCode()` 和 `toString()`,这些方法在几乎所有 Java 类中都有应用。 3. **支持多态性**:通过继承 `Object` 类,Java 支持多态性,...

    Java软件开发实战 Java基础与案例开发详解 6-2 object类 共7页.pdf

    `Object`类提供了许多基本而强大的功能,包括`toString()`、`equals()`、`hashCode()`、`getClass()`以及`clone()`等方法。通过理解和适当重写这些方法,开发者可以更好地控制对象的行为,并提高代码的质量和可维护...

    Object类和Scanner类

    - **`public boolean equals(Object obj)`**: - `equals` 方法用于比较两个对象是否“相等”。 - 默认情况下,它比较的是两个对象的引用是否指向同一内存地址。 - 在实际应用中,我们通常会重写此方法来实现更...

    JAVA_高级特性(hashCode,clone,比较器,Class反射,序列化)

    public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; Person02 other = (Person02) obj; return this.name.equals(other.name...

    第19章编程题提交1

    public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; TwoTuple, ?&gt; other = (TwoTuple, ?&gt;) obj; return Objects.equals(this...

    对象转型和多态1

    Object obj1 = new Object(); Object obj2 = new Object(); Object obj3 = obj2; System.out.println(obj1.hashCode()); // 输出obj1的哈希码 System.out.println(obj2.hashCode()); // 输出obj2的哈希码,与...

    Object.doc

    本文将详细介绍 `Object` 类中的一些关键方法,包括 `equals`、`hashCode`、`toString`、`finalize` 和 `clone` 方法。 #### equals 方法 `equals` 方法用于测试两个对象是否相等。在 `Object` 类中,默认的实现是...

    src01 Object

    - **方法签名**:`public boolean equals(Object obj);` - **功能**:测试指定对象是否与此对象相等。 - **默认实现**:如果`this`与`obj`引用同一个对象,则返回`true`;否则返回`false`。 - **应用场景**: - ...

    Object类常用方法(csdn)————程序.pdf

    Object 类常用方法有 getClass()、hashCode()、toString()、equals()、finalize() 等。 getClass() 方法 getClass() 方法用于获取对象的实际类型。该方法返回了 Object 的 Class 对象,表示该对象的实际类型。应用...

    lombok-plugin-0.34.1-2018.2.zip

    public boolean equals(Object obj) {...} @Override public int hashCode() {...} @Override public String toString() {...} } ``` Lombok使得我们可以专注于业务逻辑,而不是重复的代码。 六、总结 Lombok...

    sonar检查规则指南

    "equals(Object obj)" and "hashCode()" should be overridden in pairs - **解释**:根据Java的约定,如果重写了`equals`方法,那么也应该重写`hashCode`方法,以保持一致性。 - **解决方案**:确保这两个方法...

    Java中父类Object的常用方法总结

    本文将详细介绍`Object`类中的三个重要方法:`toString()`、`equals()`和`hashCode()`。 **1. `toString()`方法** `toString()`方法用于返回一个表示当前对象状态的字符串。默认情况下,`Object`类的`toString()`...

    java7源码-Java-for-Android-Interview-Outline:android-必填面试大纲欢迎Star,关注

    而开发中,我们往往不关心是否是同一块内存地址,我们关心的是两个对象的数据是否相同,所以官方建议:所有的Object子类,都应该重新覆盖equals方法. public int hashCode():返回一个hashCode值,hashCode值决定了该对象在...

    Java String转换时为null的解决方法

    必须保证本类或者父类已经重写了Object类的toString方法,如果没有重写toString方法,将默认调用Object类的toString方法,返回getClass().getName() + '@' + Integer.toHexString(hashCode()),并不是obj的实际字符...

    Java中的API.docx

    2. `equals(Object obj)`:比较当前对象与传入的对象是否相等。默认情况下,`equals()`使用`==`来比较两个对象的内存地址,若要比较对象的属性值,需要重写此方法。 3. `hashCode()`:返回对象的哈希码值,通常用于...

    01.eclipse的使用以及断点调试类的访问权限4种

    - `equals(Object obj)`:比较两个对象的内容是否相等。 - `toString()`:返回对象的字符串表示形式。 - `hashCode()`:返回对象的哈希码值。 - `finalize()`:在垃圾回收器删除对象之前调用的方法。 了解并正确...

Global site tag (gtag.js) - Google Analytics