【Java】Java传值调用和传引用调用(实参和形参)
程序员文章站
2024-03-17 18:41:46
...
相关的基本概念:
- 形参:定义方式时写的参数为形参
- 实参:真正调用方法时,传入的参数为实参。
- 在我们调用方法时,会把实参传递给形参,方法内部其实是在使用形参。
- 传值调用:传值调用中传递的参数为基本数据类型,参数视为形参。
- 传引用调用:传引用调用中,如果传递的参数是引用数据类型,参数视为实参。在调用过程中,将实参的地址传递给了形参,形参上的改变都发生在实参上。
- 基本数据类型:有八种
- 整数类型:long、int 、short、byte
- 浮点类型:float、double
- 字符类型:char
- 布尔类型:boolean
- 引用数据类型:类、接口类型、数组类型、枚举类型、注解类型、字符串类型
eg:String类型就是引用类型
传值调用:
结果为:
在通常的学习中经常遇到这个例子:
public class Test {
//进行的是传值调用,形参的变化不影响实参的数值
public static void swap(int x,int y){
int temp=x;
x=y;
y=temp;
}
public static void main(String[] args) {
int a=10;
int b=20;
swap(a,b);
System.out.println("a="+a+",b="+b);
}
}
结果为:
数字进行交换,利用值传递根本就没有改变内容;要利用到传引用调用
当使用基本数据类型作为方法的形参时,在方法体中对形参的修改不会影响到实参的数值
传引用调用
public class Test {
//传引用类型参数,形参的变化影响实参的变化
public static void swap(int [] array){
int temp=array[0];
array[0]=array[1];
array[1]=temp;
}
public static void main(String[] args) {
int [] array={10,20};
swap(array);
System.out.println("a="+array[0]+",b="+array[1]);
}
}
结果为:
基本数据类型和引用数据类型作为参数的区别:
- 基本数据类型的变量中直接存放数据值本身,所以改的时候改的是数据值本身;基本数据类型修改形参的话,是不影响实参的。
- 但是引用数据类型不同的地方在于真正的数据并没有在栈区的变量中保存,而是在堆区里面保存着,虽然拷贝了一份,但是二者
- 指向的是同一块堆区。引用数据类型修改形参是影响实参的。
总结:
1.Java的基本数据类型是传值调用,对象引用类型数传引用。
2.当传值调用时,改变的是形参的值,并没有改变实参的值,但是实参的值是可以传给形参的,但是,形参的值不能传给实参。
3.当引用调用时,如果参数是对象,无论对对象做了何种操作,都不会改变改变实参对象的应用(可参考String),但是,如果改变了对象的内容,就会改变实参对象的内容,因为形参变量和实参变量共享一块堆区。