java中的值拷贝和引用拷贝问题
来源:3-8 添加重复数据
BskyRui
2017-05-13 11:44:23
在传参的过程中, 哪些情况是值拷贝和引用拷贝?
2回答
可以通过下面的例题进行区分:
1、基本数据类型和数组作为方法参数:
public class MethodDemo { //基本数据类型 public void method1(int a,int b){ a=a+2; b=b+3; System.out.println("方法中:a="+a+",b="+b); } //数组作为参数,方法中的值的改变,对数组的元素值产生影响 public void method2(int[] a){ for(int i=0;i<a.length;i++) a[i]=(i+1); System.out.println("数组方法调用中:"); for(int i=0;i<a.length;i++) System.out.print(a[i]+" ");
System.out.println(); } public static void main(String[] args) { // TODO Auto-generated method stub MethodDemo method=new MethodDemo(); int a=3,b=4; method.method1(a, b);//方法中值的改变对传入的参数值无影响 System.out.println("方法调用后:a="+a+",b="+b); int[] arr=new int[10]; System.out.println("数组作为参数的方法调用前:"); for(int i=0;i<arr.length;i++) System.out.print(arr[i]+" "); System.out.println(); method.method2(arr); System.out.println("数组作为参数的方法调用后:"); for(int i=0;i<arr.length;i++) System.out.print(arr[i]+" "); System.out.println(); } }
运行结果:
方法中:a=5,b=7
方法调用后:a=3,b=4
数组作为参数的方法调用前:
0 0 0 0 0 0 0 0 0 0
数组方法调用中:
1 2 3 4 5 6 7 8 9 10
数组作为参数的方法调用后:
1 2 3 4 5 6 7 8 9 10
2、类的对象作为方法参数
class Cat{ private String name; public Cat(String name){ this.name=name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
class CatDemo{ public void change(Cat cat){ //cat=new Cat("Haha");//使用这条语句时,输出结果是:喵喵 cat.setName("Haha");//使用这条语句时,输出结果是Haha //也就是对象的改变对传入的参数无影响,但可以改变属性值 } }
public class Demo { public static void main(String[] args) { // TODO Auto-generated method stub Cat cat=new Cat("喵喵"); CatDemo cd=new CatDemo(); cd.change(cat); System.out.println(cat.getName()); } }
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
慕运维2858188
2017-05-14
先要搞清楚什么是值传递
什么是地址传递
前者是针对 基本数据类型 作为参数传递时 是将其复制一份 对参数的修改不会原有的值
后者针对的是 引用数据类型 传递给参数的是地址 对参数的修改 不会改变原有的地址 但其内容会改变
相似问题
回答 1
回答 4