下面我会详细讲解“对Java中传值调用的理解分析”的完整攻略。
下面我会详细讲解“对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中传值调用的理解分析
基础教程推荐
- Java+mysql实现学籍管理系统 2023-03-16
- 是否适合从javabean类更新数据库? 2023-11-04
- 使用Java和WebSocket实现网页聊天室实例代码 2024-02-25
- 深入理解约瑟夫环的数学优化方法 2024-03-07
- 运用El表达式截取字符串/获取list的长度实例 2023-08-01
- JSP 动态树的实现 2023-12-17
- springboot下使用shiro自定义filter的个人经验分享 2024-02-27
- JavaWeb 实现验证码功能(demo) 2024-04-14
- Java编写实现窗体程序显示日历 2023-01-02
- Java中EnvironmentAware 接口的作用 2023-01-23
