黑马程序员技术交流社区
标题:
哈希值
[打印本页]
作者:
李敏
时间:
2012-4-9 23:08
标题:
哈希值
class fu{
static String name="zhangsan";
public void show(){
System.out.println("fu..."+name);
}
}
class zi extends fu{
public void show(){
System.out.println("zi..."+name.hashCode());
super.show();
}
}
public class Demo {
public static void main(String[] args) {
zi z=new zi();
z.show();
}
}
刚才回答问题遇到哈希值前面一个符号。咋回事?
//zi...-1432604556
//fu...zhangsan
作者:
李敏
时间:
2012-4-9 23:30
张卯 发表于 2012-4-9 23:13
是指@吗?LZ可以详细说明吗?
只是没想到调用 String 的hashCode 方法,弄出来个负的出来,不晓得正不正常。
作者:
马强
时间:
2012-4-10 21:10
哈希值有自己的算法,当你调用hashcode自动返回的值是
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
使用 int 算法,这里 s[i] 是字符串的第 i 个字符,n 是字符串的长度,^ 表示求幂。(空字符串的哈希值为 0。)
所以,你换个name值不一样,也许负也许正
作者:
马强
时间:
2012-4-10 21:29
int 有范围 算完值之后超过了就变负数 之后继续增长变正数,反正在int的范围内变化。根据name的长短和ascii码不同而不同
作者:
邓斌
时间:
2012-4-10 21:29
结果应该没错的。。。
zi用fu中的name;
所以zi和fu 的name值都是一样的。
class fu{
static String name="zhangsan";
public void show(){
System.out.println("fu..."+name.hashCode());
}
}
class zi extends fu{
/*public void show(){
System.out.println("zi..."+name.hashCode());
super.show();
}
*/
}
class Demo {
public static void main(String[] args) {
zi z=new zi();
z.show();
}
}
复制代码
输出结果:
fu...-1432604556
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2