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