今天逛论坛,又发现了一篇有关于值传递和引用传递的,本以为自己对其已经掌握了。没想到又遇到了点麻烦。
先看代码:
public class test {
public static void main(String[] args){
int i = 3;
Integer j = new Integer(3);
StringBuffer t = new StringBuffer("hello,");
System.out.println(i+" "+j+" "+t);
//System.out.println(j.hashCode());
setValue(i);
setValue(j);
setString(t);
System.out.println(i+" "+j+" "+t);
}
public static void setValue(Integer a){
//System.out.println(a.hashCode());
a=5;
}
public static void setString(StringBuffer t){
t.append("hi");
}
}
本以为输出结果是:
3 3 hello,
3 5 hello,hi
结果来了:
3 3
3 3
hello,hi
这里还是简单介绍一下值传递和引用传递。值传递只是简单的变量赋值,不会改变外层的值,而引用传递改变的是地址对应的值,会改变外层的值。
但这里为什么传递了Integer对象,还是不会变呢。原来Integer类是一个特殊对象,在Integer中的值,相当于用final定义的,一经建立就不能改变了。
这就是原因。