JavaのListについて

For-eachでよくやってしまうミス。
忘れないようにメモ

以下の様にするとfrutListのNoが最後に設定したNoになってしまう。

String[] fruitNameArray = {"apple","banana","orange"};
List<Fruit> fruitList = new ArrayList<A>();
Fruit fruit = new Fruit();
for(String fruitName : fruitNameArray) {
	int i = 1;
	fruit.setNum(i);
	fruit.setValue(fruitName.getValue);
	fruitList.add(fruit)
	i++;
}
for(Fruit fruit : fruitList) {
	System.out.println(fruit.getNum()+":"+fruit.getValue);
	/**
	*3:apple
	*3:banana
	*3:orange
	**/

正しい結果を得るには毎回Fruitクラスを生成するようにすれば良い。

String[] fruitNameArray = {"apple","banana","orange"};
List<Fruit> fruitList = new ArrayList<A>();
for(String fruitName : fruitNameArray) {
	Fruit fruit = new Fruit();
	int i = 1;
	fruit.setNum(i);
	fruit.setValue(fruitName.getValue);
	fruitList.add(fruit)
	i++;
}
for(Fruit fruit : fruitList) {
	System.out.println(fruit.getNum()+":"+fruit.getValue);
	/**
	*1:apple
	*2:banana
	*3:orange
	**/

参照型を使用しているときは参照渡しとか値渡しについて常に考えないといけない。