java方法的参数按值传递

来源:互联网 发布:java行为模式 编辑:程序博客网 时间:2024/06/06 18:52

java方法的参数按值传递,这种方式的重要后果是方法无法改变调用端变量

这句话不好理解,但我们只要记住一句话:调用需要参数的方法时,相当于参数名在赋值语句左侧,参数值在赋值语句右侧。

可以分为两种情况解释:

1.当方法参数是原始数据类型(int等等)时

public class Test{public static void main(String args[]){int i = 0;add(i);System.out.println("i:"+i);}public static void add(int j){j++;}}
输出为:“i=0,可以看到,i并没有被改变
因为根据上面标红字体那句话,以上代码相当于

public class Test{public static void main(String args[]){int i = 0;int j = i;//根据红色字体的话,这两句相当于上面的add()方法j++;System.out.println("i:"+i);System.out.println("j:"+j);}}
输出为:i=0,j=1”
这就是为什么说:方法无法改变调用端变量,因为根本就是两个独立的变量啊,我在方法中改变的是我方法自己的变量。


2.当方法参数是引用数据类型(String等等或自定义类)时

public class Test{public static void main(String args[]){A a = new A();System.out.println("a.count:" + a.count);add(a);System.out.println("a.count:" + a.count);}public static void add(A a2){a2.count++;}}class A{int count = 0;}

输出为:“a.count=0,a.count=1”,奇怪了,怎么又可以改变了!

因为根据上面标红字体那句话,以上代码相当于

public class Test{public static void main(String args[]){A a = new A();System.out.println("a.count:" + a.count);A a2 = a;//根据红色字体的话,这两句相当于上面的add()方法a2.count++;System.out.println("a.count:" + a.count);System.out.println("a2.count:" + a2.count);}}class A{int count = 0;}

输出为:“a.count=0,a.count=1,a2.count=1”,怎么两个的count都改变了?

因为此时这两个独立的变量(实际上是引用)都指向的是同一个对象,而改变的是那个对象。

方法无法改变调用端变量,这句话依然成立,因为方法确实无法改变那个变量(比如将它指向另一个A对象),改变的只是它指向的对象。


总而言之,我们只要记住本文开头红色字体那句话,就不会犯迷糊了。

0 0
原创粉丝点击