Java的数组拷贝以及对象数组的初始化

前两天读Java核心卷的时候看到以下一个例子

  基础是关于Java里面的数组拷贝,在Java里面的数组有两种复制方式,一种是下面例子中的直接赋值相等,此时staff数组与managers数组引用的是同一个数组,修改staff数组也就等同于修改managers数组。此时的拷贝相当于地址传递。

  第二种是值传递,即只将对象数组的内容复制另一份给第二个数组。此时需要Arrays类的copyof方法。

在核心卷中有讲述:

 

看完后自己去实现了一下,发现出现了问题:

代码如下:

Dog.java 


public class Dog {
	private int age=1;
	
//	public Dog(int age) {
//		this.age=age;
//	}
//	
//	public Dog() {
//		this.age;
//	}
	
	public void setAge(int age) {
		this.age=age;
	}
	
	void ShowAge() {
		System.out.println("The dog is "+age);
	}

}

Husky.java


public class Husky extends Dog{
	private String color="black";
	
//	public Husky(int age,String color) {
//		super(age);
//		this.color=color;
//	}
	
	public Husky() {
		super();
	}
	
	public void setHusky(int age,String color) {
		super.setAge(age);
		this.color=color;
	}
	
	public void showColor() {
		System.out.println("the dog's color is " +this.color);
	}
	
}

Main.java


public class Main {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Husky[] husky=new Husky[10];
		for(Husky h:husky) {
			h.setHusky(0,"blue"); 
		}
	//	Dog[] dog=husky;
		husky[0].ShowAge();	
	}

}

  发现在测试例子中只是定义了数组,却并没有进行初始化。查了下,在书上没找到相关讲述,但是找到了下面的一个博文,讲得挺清楚的。

https://www.cnblogs.com/luosongchao/p/3298150.html

修改后代码:

Main.java


public class Main {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Husky[] husky=new Husky[10];
		for(Husky h:husky) {
			h=new Husky();
			h.setHusky(0,"blue"); 
		}
		//Dog[] dog=husky;
		husky[0].ShowAge();	
	}

}

依旧报错,测试发现


public class Main {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Husky[] husky=new Husky[10];
		for(Husky h:husky) {
			h=new Husky();
			h.setHusky(0,"blue"); 
		}
		husky[0]=new Husky();
		husky[0].setHusky(0,"blue"); 
		//Dog[] dog=husky;
		husky[0].ShowAge();	
	}

}

这样就有结果

个人理解for each是值传递,而不是地址。。

更改后还是用以下方法初始化数组


public class Main {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Husky[] husky=new Husky[10];
		for(int i=0;i<husky.length;i++) {
			husky[i]=new Husky();
			husky[i].setHusky(i,"blue"); 
		}
		//Dog[] dog=husky;
		for(Husky h:husky) {	
			h.ShowAge();
			h.showColor();
		}
	}
}

结果显示:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值