java中值传递和引用传递

java中值传递和引用传递

1:按值传递是什么

指的是在方法调用时,传递的参数是按值的拷贝传递。示例如下:

public class TempTest {  
private void test1(int a){  
//做点事情  
}  
public static void main(String[] args) {  
TempTest t = new TempTest();  
int a = 3;  
t.test1(a);//这里传递的参数a就是按值传递  
}  
}  

按值传递重要特点:传递的是值的拷贝,也就是说传递后就互不相关了。

示例如下:

public class TempTest {  
private void test1(int a){  
a = 5;  
System.out.println("test1方法中的a="+a);  
}  
public static void main(String[] args) {  
TempTest t = new TempTest();  
int a = 3;  
t.test1(a);//传递后,test1方法对变量值的改变不影响这里的a  
System.out.println(”main方法中的a=”+a);  
}  
}  

运行结果是:

test1方法中的a=5  
main方法中的a=3

2:按引用传递是什么

指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。

示例如下:

public class TempTest {  
private void test1(A a){  
}  
public static void main(String[] args) {  
TempTest t = new TempTest();  
A a = new A();  
t.test1(a); //这里传递的参数a就是按引用传递  
}  
}  
class A{  
public int age = 0;  
}

3:按引用传递的重要特点

传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。

示例如下:

public class TempTest {  
private void test1(A a){  
a.age = 20;  
System.out.println("test1方法中的age="+a.age);  
}  
public static void main(String[] args) {  
TempTest t = new TempTest();  
A a = new A();  
a.age = 10;  
t.test1(a);  
System.out.println(”main方法中的age=”+a.age);  
}  
}  
class A{  
public int age = 0;  
}

运行结果如下:

test1方法中的age=20  
main方法中的age=20

4:说明

1):“在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。

(2):在Java里面只有基本类型和按照下面这种定义方式的String是按值传递,其它的都是按引用传递。

posted @ 2022-03-10 17:54  小甘同学1997  阅读(88)  评论(0)    收藏  举报