Java实参和形参与传值和传引用
2017-02-18 09:25
330 查看
实参和形参的定义:
形参出现函数定义中,在整个函数体内都可以使用,离开函数则不能使用。
实参出现在主函数中,进入被调函数后,实参变量也不能使用。
形参和实参的功能是做数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而向被调函数传送数据。
实参和形参的区别:
1.形参变量只有在被调用时才分配内存单元,在调用结束后,立即释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能在使用该形参变量。
2.实参可以变量、函数、数组等。无论实参是何种类型的,在进行函数调用时,他们都必须具有确定的值,一便把这些值传送给形参。
3.形参和实参在类型、数量、顺序上应该保持严格的一致。
4.函数在调用中发生的数据传递是单向的。即只能把实参的值传送给形参,而不能把形参的值反向传送给实参。因此,在函数调用过程中,形参的值发生改变,而实参中的值不会改变。
下面来看实例:
public class Ex2 {
public static void main(String[] args) {
int[] a = {1,2,3,4,5};
expand(a);
changeArray(a);
printArray(a);
}
public static void expand(int[] a){
int[] newArray = new int[a.length * 2];
System.arraycopy(a, 0, newArray, 0, a.length);
a = newArray;
}
public static void changeArray(int[] a){
a[0] = 10;
}
public static void printArray(int[] a){
for(int i = 0; i<a.length; i++){
System.out.print(a[i] + "\t");
}
System.out.println();
}
}
输出结果为:10 2 3 4 5
值传递和引用传递:
先明白几个概念:
1、Java方法基本数据类型是传值,对象类型传引用,这是千真万确的。
2、当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。
3、当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容。
4、按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本
5、按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本
6、“在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。
7、在Java里面只有基本类型和按照下面这种定义方式的String是按值传递,其它的都是按引用传递。就是直接使用双引号定义字符串方式:String
str = “Java”;
所以上述实例可以用2和3解释
形参出现函数定义中,在整个函数体内都可以使用,离开函数则不能使用。
实参出现在主函数中,进入被调函数后,实参变量也不能使用。
形参和实参的功能是做数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而向被调函数传送数据。
实参和形参的区别:
1.形参变量只有在被调用时才分配内存单元,在调用结束后,立即释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能在使用该形参变量。
2.实参可以变量、函数、数组等。无论实参是何种类型的,在进行函数调用时,他们都必须具有确定的值,一便把这些值传送给形参。
3.形参和实参在类型、数量、顺序上应该保持严格的一致。
4.函数在调用中发生的数据传递是单向的。即只能把实参的值传送给形参,而不能把形参的值反向传送给实参。因此,在函数调用过程中,形参的值发生改变,而实参中的值不会改变。
下面来看实例:
public class Ex2 {
public static void main(String[] args) {
int[] a = {1,2,3,4,5};
expand(a);
changeArray(a);
printArray(a);
}
public static void expand(int[] a){
int[] newArray = new int[a.length * 2];
System.arraycopy(a, 0, newArray, 0, a.length);
a = newArray;
}
public static void changeArray(int[] a){
a[0] = 10;
}
public static void printArray(int[] a){
for(int i = 0; i<a.length; i++){
System.out.print(a[i] + "\t");
}
System.out.println();
}
}
输出结果为:10 2 3 4 5
值传递和引用传递:
先明白几个概念:
1、Java方法基本数据类型是传值,对象类型传引用,这是千真万确的。
2、当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。
3、当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容。
4、按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本
5、按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本
6、“在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。
7、在Java里面只有基本类型和按照下面这种定义方式的String是按值传递,其它的都是按引用传递。就是直接使用双引号定义字符串方式:String
str = “Java”;
所以上述实例可以用2和3解释
相关文章推荐
- 关于C的指针,Java/Python的引用,形参与实参个人理解
- Java实参和形参与传值和传引用
- 深刻理解Java中形参与实参,引用与对象的关系
- java 实参、形参、传值调用、传引用调用的理解
- java引用形参实参运行结果
- java 参数传递(实参/形参 按值/引用)
- 关于Java中形参与实参的理解
- java中最经典的实参和形参及引用值的改变
- java中形参与实参
- Java 形参与实参
- Java的形参与实参
- Java值传递和引用传递及形参实参的分析(实例对比c++)
- java按值传参与按引用传参_旺旺老师Java学习解决方案_第一季
- 关于引用数据类型的形参与实参讨论
- Java中的形参和实参的区别以及传值调用和传引用调用
- Java中的形参和实参的区别以及传值调用和传引用调用
- 形参与实参, 值传递与引用传递, ref参数与out参数
- java中形参与实参的一点总结
- 数组的形参与实参,通过引用传递数组
- Java 形参与实参