下面我会详细讲解“对Java中传值调用的理解分析”的完整攻略。
什么是传值调用
Java中,方法调用时参数的传递都是按值传递的,也就是说在调用方法时,实参把它的值传递给对应的形参,此时形参接收到的是实参值的一个拷贝,也就是说,无论实参是基本数据类型还是引用类型,形参变量都是对其值拷贝的一份副本进行操作,而无法修改实参变量的值。因此,Java中的传值调用又叫做值传递。
下面以两个示例说明Java中的传值调用。
示例一
public class Test {
public int num = 0;
public static void main(String[] args) {
Test t = new Test();
System.out.println("调用前:" + t.num);
addNum(t.num);
System.out.println("调用后:" + t.num);
}
public static void addNum(int num) {
num += 1;
System.out.println("方法内部:" + num);
}
}
运行该代码可以得到如下输出:
调用前:0
方法内部:1
调用后:0
可以看到,在调用addNum(int num)
方法时,实参t.num
的值为0,传递给方法中的形参num
,方法内部对形参num
进行加1操作后,其值变为1。但是在main
方法中,打印输出实参t.num
时,其值并没有发生改变,仍然是0。这说明在方法调用中,虽然形参接收了实参的值的一个副本进行操作,但是实参变量本身的值并没有改变。
示例二
public class Test {
public Integer num = 0;
public static void main(String[] args) {
Test t = new Test();
System.out.println("调用前:" + t.num);
addNum(t);
System.out.println("调用后:" + t.num);
}
public static void addNum(Test t) {
t.num += 1;
System.out.println("方法内部:" + t.num);
}
}
运行该代码可以得到如下输出:
调用前:0
方法内部:1
调用后:1
可以看到,相对于示例一,我们将实参t.num
改为了引用类型Test
的实例变量num
,形参num
也变成了引用类型Test
的实例变量num
的一个副本。在方法调用时,虽然形参num
和实参t.num
指向的是同一个对象,但是它们之间仍然是按值传递的,也就是形参变量num
和实参变量t.num
拥有各自的存储空间,只是存储的是同一个对象的地址。所以在方法内部,对形参num
进行+1操作时,实参t.num
指向的对象的值也会发生改变。
总结
以上两个示例说明了Java中的传值调用,当实参是基本数据类型时,形参接收的是实参值的一个拷贝,方法内部无法修改实参的值;而当实参是引用类型是,形参和实参虽然指向同一个对象,但是它们之间仍然是按值传递的。在方法内部,对形参的操作会同时修改实参指向的对象的值,这一点需要注意。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:对Java中传值调用的理解分析 - Python技术站