是否有任何理由不能使用hashCode方法测试Java字符串的相等性?所以基本上,而不是....
"hello".equals("hello")
Run Code Online (Sandbox Code Playgroud)
你可以用......
"hello".hashCode() == "hello".hashCode()
Run Code Online (Sandbox Code Playgroud)
这很有用,因为一旦字符串计算了它的哈希码,那么比较一个字符串就像比较一个int一样有效,因为字符串缓存了哈希码,而且很可能字符串在字符串池中,如果你设计它办法.
ZZ *_*der 38
让我举个例子.试试这个,
public static void main(String[] args) {
String str1 = "0-42L";
String str2 = "0-43-";
System.out.println("String equality: " + str1.equals(str2));
System.out.println("HashCode eqauality: " + (str1.hashCode() == str2.hashCode()));
}
Run Code Online (Sandbox Code Playgroud)
我的Java上的结果,
String equality: false
HashCode eqauality: true
Run Code Online (Sandbox Code Playgroud)
dst*_*bbe 37
因为:如果对象相等,则两个对象的hashCodes必须相等,但是,如果两个对象不相等,则hashCode仍然可以相等.
(评论后修改)
其他人指出了为什么它不起作用.所以我只是添加补充说,无论如何,收益将是最小的.
在Java中比较两个字符串时,String equals函数首先检查它们是否是对同一对象的两个引用.如果是这样,它会立即返回true.然后检查长度是否相等.如果不是,则返回false.只有这样才开始逐个字符地比较.
如果你正在操作内存中的数据,同一对象比较可以快速处理"相同"的情况,这是一个快速,嗯,4字节整数比较我认为.(如果对象句柄的长度错误,有人会纠正我.)
对于大多数不相等的字符串,我敢打赌长度比较很快发现它们不相等.如果您要比较两个名称 - 客户,城市,产品等等 - 它们的长度通常不等.所以一个简单的int比较快速处理它们.
性能最糟糕的情况是两个长的,相同的,但不是相同的对象字符串.然后它必须做对象句柄比较,false,继续检查.长度比较,真实,继续检查.然后通过字符串的整个长度逐个字符来验证是否确实它们一直到最后都是相等的.
| 归档时间: |
|
| 查看次数: |
23168 次 |
| 最近记录: |