java - 覆盖 hashCode 后,toString() 为同一个对象返回相同的值,但使用 "==" 后返回 false
问题描述
您可能知道 Object 有一些功能,例如我们有来自 oracle Documentacion 的 toString() 我们可以知道默认情况下它返回 hashCode() 的 HexValue https://docs.oracle.com/javase/7/docs/api/java /lang/Object.html#toString() 我们也可以使用 hashCode() 来检查相等对象(当然实现取决于你)所以我为我的 Class Projekt 做了实现:
public class Projekt {
int i;
public Projekt(int i) {
this.i=i;
// TODO Auto-generated constructor stub
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + i;
return result;
}
}
测试代码:
Projekt projekt = new Projekt(1);
System.out.println(projekt.toString());
System.out.println(projekt.toString() == projekt.toString());
输出:
Projekt@20
false
我还尝试通过写入 StringPool 中的 projekt.toString() 来获取内部值:
String string = projekt.toString();
String stringABC = projekt.toString();
System.out.println(string == stringABC);
根据 PoolString 我应该有相同的参考,但 outPrint 是假的。
所以这个方法返回不同的参考值,但我不明白为什么?
解决方案
这是因为“toString()”方法返回一个字符串。所以每次调用toString()
它都会返回一个新的引用,因为字符串是不可变的(即使它们是相同的文本)
推荐阅读
- go - 什么是 golang.org/x 命名空间?
- java - 检索使用拦截器进行 HTTP 调用的方法的名称
- javascript - 如何在 NodeJS 中将 CSV 对象更改为 JSON
- elasticsearch - 弹性搜索完整字符串匹配不起作用
- java - 复制 Swing JTable 的选定行的最佳算法
- .net-core - 如何在 F# 中向下转换而忽略泛型类型?
- python - 仅返回 numpy 数组的几个元素
- python - 如何在图片中找到突出显示的元素。我用硒
- git - git fetch 在两个提交哈希之间获取
- c# - 无法在 Abp 控制器中注入 UserManager 依赖项