java中的值拷贝和引用拷贝问题

来源:3-8 添加重复数据

BskyRui

2017-05-13 11:44:23

在传参的过程中, 哪些情况是值拷贝和引用拷贝?

写回答

2回答

好帮手慕珊

2017-05-13

可以通过下面的例题进行区分:

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());
}
}

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

0
hskyRui
h 非常感谢!
h017-05-14
共1条回复

慕运维2858188

2017-05-14

先要搞清楚什么是值传递

什么是地址传递

前者是针对 基本数据类型 作为参数传递时 是将其复制一份 对参数的修改不会原有的值

后者针对的是 引用数据类型 传递给参数的是地址  对参数的修改  不会改变原有的地址 但其内容会改变

0

0 学习 · 7235 问题

查看课程