您可能知道对象具有某些功能,例如,我们有oracle Documentacion的toString(),我们可以很清楚地知道它返回hashCode()的HexaValuehttps://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString()我们还可以使用hashCode()来检查相等性对象(当然实现取决于您)因此,我为我的班级项目实现了实现:
公开课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假
此外,我还尝试通过写在StringPool中的projekt.toString()中的值:
String string = projekt.toString();
String stringABC = projekt.toString();
System.out.println(string == stringABC);
根据PoolString,我应该具有相同的引用,但是outPrint为false。
所以此方法无法获得不同的参考值,但是我无法理解为什么?
这是因为“ toString()”方法returns字符串。因此,每次调用toString()
都会返回一个新引用,因为字符串是不可变的(即使它们是相同的文本)
String类只是指向内存中某处的字符串(char)数据的指针。它是一个类,不是像布尔值,字节,字符,short,int,long,float和double这样的原始类型。
因此,比较两个字符串就比较了指针。
您在生成两个字符串:
String string = projekt.toString();
String stringABC = projekt.toString();
所以您现在有2个不同的指针。它们内部具有相同的文本,但是它们在内存中的不同位置。
但是您可以使用对象的equals()方法:
System.out.println(string.equals(stringABC));