有关java中的参数调用的问题
2018-01-01 00:00
260 查看
摘要:
关于值传递、引用传递啊什么的,每次都没能够深刻理解。翻了很多博客,也都没什么实质性的理解,索性自己写一下,顺道再消化一遍。
专业术语——
按值调用(call by value) 表示方法接受的是调用者提供的值。
按引用调用(call by reference) 表示方法接受的是调用者提供的变量地址。
一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。
java中只有值传递!
java中只有值传递!
java中只有值传递!
重要的事情要说三遍!!!
也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容。
可以看到,无论怎样,调用这个方法之后,percent的值还是10.下面看一下具体的执行过程:
方法参数共有两种类型:
.基本数据类型(数字、布尔值)。
.对象引用。
一个方法不可能修改一个基本数据类型的参数。而对象引用作为参数就不同了,可以很容易地利用下面这个方法实现将一个雇员的薪金提高两倍的操作:
方法得到的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象。
下面我们写一个交换两个对象的方法:
总结:
.一个方法不能修改一个基本数据类型的参数(即布尔型和数值型)。
.一个方法可以改变一个对象参数的状态。(即对象成员属性的值,一般为set(....)方法 )
.一个方法不能让对象参数引用一个新的对象。
关于值传递、引用传递啊什么的,每次都没能够深刻理解。翻了很多博客,也都没什么实质性的理解,索性自己写一下,顺道再消化一遍。
专业术语——
按值调用(call by value) 表示方法接受的是调用者提供的值。
按引用调用(call by reference) 表示方法接受的是调用者提供的变量地址。
一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。
java中只有值传递!
java中只有值传递!
java中只有值传递!
重要的事情要说三遍!!!
也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容。
public static void tripleValue(double x) // doesn't work { x=3*x; } double persent = 10; tripleValue(percent);
可以看到,无论怎样,调用这个方法之后,percent的值还是10.下面看一下具体的执行过程:
1) x 被初始化为percent值的一个拷贝(也就是10)。 2) x被乘以3后等于30.但percent仍然是10) 3) 这个方法结束之后,参数变量x不再使用。
方法参数共有两种类型:
.基本数据类型(数字、布尔值)。
.对象引用。
一个方法不可能修改一个基本数据类型的参数。而对象引用作为参数就不同了,可以很容易地利用下面这个方法实现将一个雇员的薪金提高两倍的操作:
public static void tripleSalary(Employee x) //works { x.raiseSalary(200); } 当调用 harry = new Employee(...); tripleSalary(harry); 时,具体的执行过程如下: 1) x被初始化为harry 值的拷贝,这里是一个对象的调用。 2) raiseSalary 方法应用于这个对象引用。x和harry同时引用的那个Employee对象的薪金提高了200%。 3) 方法结束后,参数变量x不再使用。当然,对象变量harry继续引用那个薪金增至3倍的雇员对象。
方法得到的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象。
下面我们写一个交换两个对象的方法:
Boy a = new Boy(...); Boy b = new Boy(...); swap(a,b); public static void swap(Boy x, Boy y) //doesn't work { Boy temp = x; x = y; y = tmp; } swap 方法的参数x和y 被初始化为两个对象引用的拷贝,这个方法交换的是这两个拷贝。 然而,在方法结束后参数变量x和y被丢弃了。原来的变量a和b仍然引用这个方法调用之前所引用的对象。
总结:
.一个方法不能修改一个基本数据类型的参数(即布尔型和数值型)。
.一个方法可以改变一个对象参数的状态。(即对象成员属性的值,一般为set(....)方法 )
.一个方法不能让对象参数引用一个新的对象。
相关文章推荐
- 有关java的函数调用返回值的问题和参数传递问题
- java调用linux命令传递参数问题
- 关于delphi调用vc编写的dll中参数类型有关问题
- JAVA 通过 JNA 调用 C程序 dll 函数传入中文参数问题
- webview js 与 java 调用参数问题。
- java webservice调用中参数null的问题
- java调用linux命令传递参数问题
- java Web Service Axis调用参数问题
- java中paint()的具体用法(说具体点 一起重写之后的问题 还有有关调用问题)
- 关于JAVA调用ORACLE存储过程时,传入动态参数作为in语句条件的问题
- java调用Kotlin方法的参数为null异常问题
- 关于在java环境下调用 .net的 webservice无法获取参数的问题
- 有关非Java代码(即Java调用C++中自然方法)的问题
- Java方法调用时传递参数问题
- C#调用Java端Web服务(CXF)时发生Integer参数类型无法传递的问题
- Java JNI调用c++ dll文件,传递参数乱码问题
- Java中有关构造器初始化调用的问题
- (转载)java调用linux命令传递参数问题
- java中有关参数传递的问题
- c#调用java写的webservice数据丢失有关问题