黑马程序员技术交流社区
标题:
Object的一些方法是用于干什么的
[打印本页]
作者:
黄晓鑫
时间:
2014-1-17 14:35
标题:
Object的一些方法是用于干什么的
比如hashCode()
equals()
toString()
求详细讲解点 讲底层点
作者:
。子伤。
时间:
2014-1-17 19:42
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
复制代码
作者:
罗安迪
时间:
2014-1-25 18:11
第一个,关于hashCode()方法:
在Java编程语言中,每个类都提供hashCode()方法,这个方法会把类的一个实例(即对象)里面的数据转化为一个哈希值(涉及加密法,是一个32位的带符号整数),当存储或操作一个实例时(此实例应为了均匀分布在不同的输出中以便在加密时使用)这个哈希值会被其他代码使用。
这是一个很重要的特性,以便去使用哈希表格和其他的数据结构(此数据结构是为了存储objects于建立在其他哈希运算上的集合中的)。
技术上来说,在java,hashCode()方法是一个默认上的方法。意味着,当他被直接运用在JVM里面的原代码时,她有改特性的元性。
所有的类都继承自基本的类java.lang.Object中的一个基本的哈希方案,而不是重新写一个哈希函数一处理他们的数据。提供自己的应用的类必须override那个object的方法即hashCode()。
基本的协议就是为了这个方法内已经override了的应用,他们保持在与同样的object里面的equals()的方法一贯的方式中:一个提供的object必须要一贯的给出同样的哈希值(除非它改变了,那么新版本将不再被认为“equal”(等同于)旧值了),并且那两个object(即equal()关联的两个)必须提供一样的哈希值。在那些哈希值在不同的java应用中,甚至在同意程序的不同执行文件执行中的,都没必要保持一致,并且当需要两个不相等的object要有不同的哈希值时,这并不是强制的(即,应用的哈希函数不需要是完美哈希函数)
例子:
下面的类Employee通过组合它成员的哈希数来实现它的哈希函数。
public class Employee {
int employeeId;
String name;
Department dept;
。。。 。。。 // 其他的一些方法在这里
@Override
public int hashCode() {
int hash = 1;
hash = hash * 17 + employeeId;
hash = hash * 31 + name.hashCode();
hash = hash * 13 + (dept == null ? 0 : dept.hashCode());
return hash;
}
}
作者:
罗安迪
时间:
2014-1-25 18:17
这个链接也有关于hashCode()的解释呢:http://www.cnblogs.com/yoyozhou/archive/2012/02/25/2367829.html
作者:
651012160
时间:
2014-1-25 20:38
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。也就是说Object的方法是让对象实现的。
例如:hashCode()返回该对象的哈希码值
equals()指示其他某个对象是否与此对象“相等”。
toString()返回该对象的字符串表示。
作者:
筱厸厸
时间:
2014-1-25 22:49
hashCode 根据对象的内存地址计算得到的整数值,该方法一般用做判断两个对象是否相等的唯一标识,不同对象有不同的哈希码值
equals 主要是用来判断两个对象是否相等,俩个对象相等坑定返回true,也可以覆盖该方法按照自己的逻辑比较对象
toString 返回对象的字符创表示,默认情况下,Object的toString返回类名 + @ + 哈希码值组成的字符串,该方法可以覆盖返回自己想要的字符串表示形式
还有,对于equals和hashCode方法,最好是覆盖了equals方法最好也要覆盖hashCode方法,举个例子,
class Person{
// 属性
@Override
public boolean equals(Object obj){
// 判断是否相等的逻辑
}
}
复制代码
上面的类用逻辑判断相等,但是当添加到集合中时,例如Set中时会出项多个相同的结果,因为没有覆盖hashCode,而Set一般是根据hashCode方法的返回值来判断两个对象是否相等的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2