解决方案 »
- 读取序列化内容并修改
- 正则式的又一个问题
- 关于List组件的问题
- 在JAVA中如何用TRANSACTION来对数据库进行一系列的操作。
- -----如何向jTextpane中添加文本---
- 请教 最小化到 任务栏 的方法
- 急,在线等待.请各位帮忙. 文件的读取问题
- 天哪,郁闷!!我在jbpersonal5下做的工程,jbp6也运行好好的,可到了jbe5,jbe6下都有错,找不到类,今天好不容易下了jbe7,可还是找不到
- 向远程主机发送数据包,如何组包?
- 有一个类,里面有一个字符串变量,这个变量要在程序运行时才能确定,有另一个类,想在前一个类实例化后访问它的字符串变量,怎样做?
- 关于String[] 数组的简写问题 如:byte[]->[B
- 一个算法问题,
一般我们比较对象,做了两件事:
A. 两个对象equels返回true,则表示两个对象相同。
B. 因为hashCode()有个协议,就是类引用相同的两个变量的,
hashCode访问必须相同。
由此推导出两个命题:
命题A:【equels - > 对象相等】
命题B:【对象相等 -> 两个对象hashCode()访问相等】;
一般我们命题A成立就OK了。
但了让程序完美,所有也让命令B成立。(防止HashMap, Hashtable会出现问题).
因为我们一般都是用对象内存地址来比较。
你看Object类的源码就知道。 equels()和 hashCode()里面,都是用对象内存地址来比较的。我们要保证的就是:命令A和命题B同时成立!!!
方法就是通过 命题A ===》命题B
现equels()不是用对象内存做比较了,所有,我们要保证命题B成立,就必须用命题
A中的变量 bal 和 code 。只要这两个变量组合的hashCode一样就行。
SortOf b = new SortOf();
a.code = "A";
b.code = "B";
a.bal = 1;
a.rate = 2;
b.bal = 2;
b.rate = 1;a.equals(b) = true;
a.hashCode()=1;
b.hashCode()=2;
aInstance
code=“abcd”//lenght=4
bal=2
rate=3bInstance
code="efgh"//length =4
bal=3
rate=2如果按照D
((SortOf)o).code.length() * ((SortOf)o).bal * ((SortOf)o).rate =4*2*3=4*3*2=24
也就是说equls相等
但此时aInstance的hashcode=4*3=12
bInstance 的hashcode=4*2=8
也就是说当equals相等时这两个对象的hashcode不相等。所以显然D是不对的。
LZ说的那种情况应该是hashCode为false,但是short类型都为0的情况吧,只能说题目不严谨喽