下面我会详细讲解“对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正则替换sql中的参数实例代码 2023-06-06
- java – 从Postgres数据库检索时,字节数组的大小变为double 2023-10-31
- JSP 开发之THE SERVLET NAME ALREADY EXISTS.解决方法 2023-07-30
- SpringBoot业务逻辑异常的处理方法介绍 2023-05-14
- java实现科学计算器的全过程与代码 2023-01-09
- Java文件管理操作的知识点整理 2023-05-19
- Mybatisplus详解如何注入自定义的SQL 2023-01-24
- Java编写网络聊天程序实验 2023-04-06
- SpringBoot多数据源读写分离的自定义配置问题及解决方法 2022-12-14
- Spring扩展BeanFactoryPostProcessor使用技巧详解 2023-06-01