@Test
public void testObject() {
ArrayList list = new ArrayList();
System.out.println("a : " + list.hashCode());
changeObject(list);
System.out.println("d : " + list.hashCode());
}
public void changeObject(ArrayList list) {
System.out.println("b : " + list.hashCode());
list.add("1");
System.out.println("c : " + list.hashCode());
}
结果是:
a : 1
b : 1
c : 80
d : 80无法理解输出,求大侠指点!
public void testObject() {
ArrayList list = new ArrayList();
System.out.println("a : " + list.hashCode());
changeObject(list);
System.out.println("d : " + list.hashCode());
}
public void changeObject(ArrayList list) {
System.out.println("b : " + list.hashCode());
list.add("1");
System.out.println("c : " + list.hashCode());
}
结果是:
a : 1
b : 1
c : 80
d : 80无法理解输出,求大侠指点!
建议lz看看这个blog,我觉得写的不错。http://www.blogjava.net/ycfdonews/articles/168476.html
而如果你引用地址,那就只是引用一下该地址里存放的数值,所以地址不会改变的~~但值可以改变。
希望有帮助~~
int【】 a=new int【】{1,2},a【0】是引用一个地址,a【2】是一个地址,当你要表示数组a的时候,肯定不能和a【0】一样
public int hashCode() {
int hashCode = 1;
Iterator<E> i = iterator();//得到迭代器
while (i.hasNext()) {
E obj = i.next();
hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode());
}
return hashCode;
}
由于初始的list里面没有值,所以不会执行while循环,自然输出结果就为1;changeObject(list);
在该方法中, System.out.println("b : " + list.hashCode());执行的时候同样没有改变list,所以会输出b:1;当执行add方法时,为list添加一个对象,此时while循环将会执行,此时的hashCode值为,31*1+“1”.hashCode;对于后面的“1”.hashCode要用String的hashCode方法进行计算,因为String类重载了hashCode方法,计算的结果为49(可以看看String源码就一目了然),所以最终的输出结果为c :80;
最后的输入,你应该明白了吧。有时候问题的解决方法都可以从java提供的API源码中找到答案,希望对你有所帮助……