java传参的方法步骤
java的传参是按值传参(我现在的理解)
1、基本数据类型作为变量(变量的复制品);
所以要改变要像c/c++那样可写一个可以交换基本类型变量值的函数在java中要费劲的多。
2、对象引用作为参数,其实传入的也只是对象的引用的复制品(不是对象的复制品),本质上还是按值传参,但是这些应用的复制品不管有多少个,总之还是指向同一个对象。除非你把它指向另外的对象或者置为null,否则你通过引用操纵对象成员一定能够改变对象的内容。假如大家不理解,可以看我下面的例子:
class Test
{ public static void main(String args[]) { int val; StringBuffer sb1, sb2; val = 10; sb1 = new StringBuffer("apples"); sb2 = new StringBuffer("pears"); System.out.println("val is " + val); System.out.println("sb1 is " + sb1); System.out.println("sb2 is " + sb2); System.out.println("***********************"); System.out.println("calling modify"); //按值传递所有参数 modify(val, sb1, sb2); System.out.println("returned from modify"); System.out.println("***********************"); System.out.println("val is " + val); System.out.println("sb1 is " + sb1); System.out.println("sb2 is " + sb2); } public static void modify(int a, StringBuffer r1,StringBuffer r2) { a = 0; //基本变量还是按值传递 r1 = r2; //引用一样是按值传递,其作用域是有限制的,不是把r2的地址给r1,赋予的只是一个引用变量。 r2.append(" taste good");//操纵原对象的值。 r1=r2; System.out.println("方法中a is " + a); System.out.println("方法中r1 is " + r1); System.out.println("方法中r2 is " + r2); } }结果:
val is 10
sb1 is apples sb2 is pears *********************** calling modify 方法中a is 0 方法中r1 is pears taste good 方法中r2 is pears taste good returned from modify *********************** val is 10 sb1 is apples sb2 is pears taste good3、要注意String类型以及所有的基本类型的Wrrapper类有特殊情况,他们的引用改变不了他们所指向的对象的值。因为他们是IMMUTABLE类。只有将改变后的对象作为返回值才能得到改变后的对象。