Java中的参数传递问题
??????在java中关于参数传递时到底是按值传递还是按引用传递一直是比较头疼的。
我的理解是,基本类型是按值传递,而对象类型则是按引用传递的。但是,大家可能会发现一个问题。看下面的程序:
public static StringBuffer test(StringBuffer str) { str.append("world"); return str; } public static void main(String[] args) { StringBuffer string = new StringBuffer("hello"); StringBuffer str = test(string); System.out.print(string==str);System.out.println(string); }?? 这段程序和上个程序的区别是使用了StringBuffer对象,这时就是一个按引用传递了。即,当把string赋值给str的时候,并没有在堆内存当中再创建一个string的复制对象,而是简单的把?string的地址赋给str,所以此时string和str会指向同一个堆内存地址,所以,对任何一个的修改都会影响到另一个。就好比,两个人合起来花一百块钱,谁多花了都会影响到另一个人,因为是共有的。由此可以猜到改程序的打印结果:true?? helloworld。
?
????? 现在就有一个问题,如果有两个基本类型的变量,int a 和 int b,如何通过一个方法将他们的顺序进行交换?答案好像是不行。如果你把a和b传递给某个方法作为参数,那么会在堆内存当中复制一个a和b,也就是新的a和b的任何修改不会影响到原来的。所以,交换两个变量的顺序就只能在方法内部有效。