代碼:如下
public static void main(String[] args)
{
Stack stack = new Stack<>();
stack.push(1);
stack.push(2);
System.out.println(stack.hashCode());// hashcode輸出994
for (Integer i : stack)
{
System.out.println(i); // 輸出1 2
}
changeStack(stack);
System.out.println(stack.hashCode());// hashcode輸出32
for (Integer i : stack)
{
System.out.println(i);//輸出1
}}
public static void changeStack(Stack<Integer> stack)
{
stack.pop();
}
問題:
為什么stack在changeStack()之后,居然連hashcode都變了呢?我知道stack的值會改變的,只是不知道為啥內(nèi)存地址也會變,前后的hashcode不應(yīng)該一樣么?我用Stringbuffer類,對他append之后,前后的hashcode一樣。為啥Stack會這樣呢?
1 回答

慕尼黑的夜晚無繁華
TA貢獻1864條經(jīng)驗 獲得超6個贊
朋友,首先糾正一個問題,hashcode 值 并不是Stack的地址的引用,也不是Stack中元素的地址引用。根據(jù)繼承關(guān)系分析,
Stack調(diào)用的AbstractList抽象類HashCode方法或者hashCode值。
從圖中可以看出,HashCode值得計算并不是地址引用,但是跟元素的HashCode有關(guān)聯(lián),即元素的HashCode值參與了計算。
我們Stack中存在的元素是Integer類型,而Integer 類型的HashCode值實際上就上Integer的value,即我們存儲的值,如圖:
經(jīng)過這段介紹我想你應(yīng)該可以可以理解了吧~
添加回答
舉報
0/150
提交
取消