【发布时间】:2018-05-10 20:17:52
【问题描述】:
我想从我的原始列表中创建一个排序列表 - 无需 Collections.sort(list) 调用更改原始列表。所以我有一个未排序的列表和一个正在排序的列表 - 来自同一个列表。
看看这段代码:
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList();
list.add(5);
list.add(8);
list.add(3);
list.add(6);
System.out.println("Before method list is");
System.out.println(list);
ArrayList<Integer> theReturnedList = sorted(list);
System.out.println("After it is");
System.out.println(list);
}
private static ArrayList<Integer> sorted(ArrayList<Integer> list){
ArrayList<Integer> returnList = list;
Collections.sort(returnList);
return returnList;
}
list 对象被排序 - 即使我没有在其上调用 Collection.sort() 方法。如何避免?
因为我认为这会发生......
public static void main(String[] args) {
String original = "I am an object created in main";
String theChangedObject = change(original);
System.out.println(original);
}
private static String change(String string){
String changed = string;
changed = "I was changed";
return changed;
}
对象orginal 保持不变。
【问题讨论】:
-
你认为
ArrayList<Integer> returnList = list;有什么作用? -
你了解引用类型的工作原理吗?
-
@lelelo:除非通过反射,
Strings 是不可变的——所有会修改字符串的东西都会返回包含修改的新字符串。因此,您永远不会有一个字符串可以修改而另一个字符串不能修改的情况,因为一开始就无法修改它们。 -
@lelelo 阅读 this 以获得进一步解释。
标签: java arrays methods collections