java散列码问题 求解答 谢谢

在java中散列码具体代表着什么,或者说如果我两个变量的散列码相等是不是可以说他
们地址相同?
如下:
String s = "abc";
String d = "abc";
c 和 d 的散列码相同他们的地址相同吗?
或者再问 java中有没有像c++中一样的&符号 可以求得一个变量的地址

s==d。散列表是用来标识对象的唯一性的,s和d是指向同一个对象的引用,它们都存着同一个对象的地址,有相同的散列码。

javar的内存模型和C++是非常不一样的。你的例子中
String s = "abc";
String d = "abc";
其实“abc”是放在静态常量区,意味着s和d其实它们是指向同一个地址。
散列码只是根据你输入的数据根据一定的散列函数计算,但是要注意,两个不同的变量,有可能散列值会一样。所以散列码相等,不可以说它们相等。
或者再问 java中有没有像c++中一样的&符号 可以求得一个变量的地址。Java里头没有指针的概念,所以没法取得地址值 ,而且你也无需关心地址,
java会自行帮你释放内存

对于楼主这个例子来说,比较特殊,就像楼上所说的, abc是个常量,
不但他们的散列码相同而且他们的地址也相同。
因为JVM会识别出它们指向的是同一个静态对象。
java的散列码是用来区别对象在逻辑上是否相等的一个条件之一。
相同的对象散列码必定相同, 但是散列码相同的对象未必是相等的。
散列码也并不能作为地址是否相等的判断条件。
java没有取地址符号&, java中不能获取变量的地址,一切都是托管的。