关于Java中方法调用时参数的传递
来源:互联网 发布:网络视频监控施工方案 编辑:程序博客网 时间:2024/05/01 16:47
1.问题说明
在C++中,函数调用时有传值调用和传址调用两种方式,但在Java中只有传值调用一种方式。Java中的方法参数为那几种基本数据类型的情况跟C++中一样,传入的只是变量的拷贝。而当参数类型为类对象时,则有可能会误以为是传址调用。
2.测试用例
现在此举出例子并加以说明
public class AClass {
int data;
}
int data;
}
该类为作为测试用的类,里面只有一个域。
2.1第一个用例:
public class ParameterTest {
public static void main(String[] args) {
AClass a = new AClass();
a.data = 10;
test1(a);
System.out.println(a.data);
}
public static void test1(AClass aClass) {
aClass.data = 0;
}
}
public static void main(String[] args) {
AClass a = new AClass();
a.data = 10;
test1(a);
System.out.println(a.data);
}
public static void test1(AClass aClass) {
aClass.data = 0;
}
}
执行过程:
先构造一个新的实例,并为其赋值为10。再调用方法test1(),在该方法中将data的值设为0。然后程序又回到方法体外面,输出结果为0。
在此看来,貌似方法调用时传的是地址,因为对data域的改动影响到了方法体外面。那么再来看下一个例子。
2.2第二个用例:
public class ParameterTest {
public static void main(String[] args) {
AClass a = new AClass();
a.data = 10;
test2(a);
System.out.println(a.data);
}
public static void test2(AClass aClass) {
AClass b = new AClass();
b.data = 100;
aClass = b;
}
}
public static void main(String[] args) {
AClass a = new AClass();
a.data = 10;
test2(a);
System.out.println(a.data);
}
public static void test2(AClass aClass) {
AClass b = new AClass();
b.data = 100;
aClass = b;
}
}
此时同样构造一个新的实例,并将其数据域赋值为10,再调用方法test2()。与方法test1()不同的是,在该方法中又定义了一个新的实例(其值为100),然后使传入的参数指向该实例。该方法执行完毕后,输出的结果为10。看来在方法体中的操作出了方法后就没有作用了,这样的话又不像是在传址了。那是为什么呢?
3.运行过程说明
3.1 对于第一个测试用例
构造实例并为其数据赋值后(如下图),产生一个指向实例的引用a:
调用方法test1()时(如下图),a'为引用a的一个拷贝,它也指向当前的实例:
当在test1()的方法体中修改数据域的值时(如下图):
因为在方法体中,传入的引用的拷贝指向没有发生改变,所以它修改了数据域的值后会影响到原来的实例的值。
3.2 对于第二个测试用例:
同样,构造实例并为其赋值后,再调用方法test2()。在方法体中传入的依然是引用的一个拷贝。如下图:
在方法test2()中构造一个新的实例并为其赋值100后,如下图:
在方法体中为传入的引用的拷贝再次赋值后,它指向了方法体中产生的实例b,如下图:
经过上图,可以看出:在方法体中传入的引用的拷贝指向确实改变了,它指向了新构造的实例b。但是在方法体外面,原来的实例指向还是没变,所以这回的输出还是10。
4.小结
在Java的方法调用中,方法中的参数是以传值的形式进行的,不管它是什么数据类型。如果是基本数据类型,则就是传入该值的一个拷贝;如果是类类型,则传入的是引用的一个拷贝。归根结底还是传的值。
0 0
- 关于Java中方法调用时参数的传递
- 关于Java中方法调用时参数的传递
- 关于Java中方法调用时参数的传递
- 关于Java中方法调用时参数的传递
- 关于"Java中方法参数的传递方式"的探讨
- 关于"Java中方法参数的传递方式"的探讨
- 关于java中方法的参数传递问题
- java方法调用时的参数传递问题
- Java方法调用时传递参数问题
- 关于Java方法参数的传递问题
- 关于java中参数传递的问题
- 调用方法时参数的传递
- java中方法的参数传递机制
- java中方法参数的传递机制
- JAVA中方法参数的引用传递
- JAVA中方法参数的引用传递
- Java中方法参数的传递
- Java中方法的参数传递机制
- 7.11
- 宜家V9-食品行业版设计目标与理念
- 求最大值和最大k个值
- 更改npm镜像源
- Android开发错误解决方法汇总
- 关于Java中方法调用时参数的传递
- 循环语句中的break、continue、return用法
- linux命令大全(自己制作,基于鸟书私房菜以及man)-A
- 初学python(三) list、tuple
- iOS开发中两个常见问题的处理
- 解决Eclipse建立Maven项目后无法建立src/main/java资源文件夹的办法
- partioner编程
- Android生成带图片的二维码
- 一个简单的Python3爬虫获取两城市间铁路距离程序