一个奇怪的Java集合问题

int size = list.size();
			Integer existIndex = -1;
			for (int index = 0; index < size; index++) {
				Photo photo = list.get(index);
				// 确保不会出现多个主图:如果已经找到了主图,把后面的都设置为“非主图”,防止前端验证失败,出现多个主图的情况
				if (existIndex != -1) {
					photo.setCover(0);
                                       // list.set(index,photo);
				}
				Integer c = photo.getCover();
				// 找到了主图
				if (c != null && c.equals(1)) {
					existIndex = index;
				}
			}


上周五的时候,修改集合中的1个元素,获得第N对象,修改对象的属性,这个时候list中的对象属性就更改了,但是,在循环结束之后,发现list中的元素没有修改,又恢复原状了。必须通过list.set(index,photo); 才保证符合预期。


很奇怪,难道list.get,再修改不可行?

周末写了几个集合list的例子,发现都可以正常修改。

import java.util.ArrayList;
import java.util.List;

//测试,修改Java集合中的元素的属性
public class ListTest {

	public static void main(String[] args) {
		List<User> list1 = buildList();
		list1.get(0).setName("name1");
		list1.get(0).setAge(1);
		System.out.println(list1.get(0));

		List<User> list2 = buildList();
		User user2 = list2.get(0);
		user2.setName("name2");
		user2.setAge(2);
		System.out.println(list2.get(0));

		for (User user : list2) {
			user.setName("name3");
			user.setAge(3);
		}
		System.out.println(list2.get(0));

		updateList(list2);
		System.out.println(list2.get(0));
	}

	private static void updateList(List<User> list2) {
		System.out.println(list2.get(0));
		if (true) {
			for (User user : list2) {
				user.setName("name4");
				user.setAge(4);
			}
			System.out.println(list2.get(0));
		}
		System.out.println(list2.get(0));
	}

	public static List<User> buildList() {
		List<User> list = new ArrayList<User>();
		User user = new User();
		user.setName("name");
		list.add(user);
		return list;
	}

}

class User {
	private String name;
	private Integer age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "User [name=" + name + ", age=" + age + "]";
	}

}

通过例子可以看出,list修改方式没有问题。但是,为什么项目中的代码有问题呢?


今天是周一,再次debug,发现去掉list.set(index,photo); 结果是正确的。


这样我就搞不明白,上周五的代码问题呢。

无法复现问题,就只能“到此为止”了~

原文地址:https://www.cnblogs.com/qitian1/p/6462659.html