Oko*_*onX 47 java string reference hashset
假设我在Java中使用此代码:
HashSet<String> wordSet = new HashSet<String>();
String a = "hello";
String b = "hello";
wordSet.add(a);
Run Code Online (Sandbox Code Playgroud)
会wordSet.contains(b);回来true还是false?根据我的理解,即使它们的值相同,a也可以b参考不同的对象.所以contains()应该回来false.但是,当我运行此代码时,它返回true.只要包含值,无论String对象来自哪里,它总会返回吗?我总是保证这个吗?truebb"hello"如果没有,我什么时候不保证这个?如果我想用除Strings之外的对象做类似的事情怎么办?
实际上,HashSet都没有.
它的实现使用HashMap,这里是确定集合的相关代码contains()(实际上它是在HashMap的getEntry()方法中):
if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k))))
Run Code Online (Sandbox Code Playgroud)
哪一个:
equals()返回true答案是"是":wordSet.contains(b)将永远回归true