java - 最终静态数组列表在函数中发生了变化

标签 java arraylist

我定义了静态最终ArrayList,然后将其发送到其他类进行更改。但它应该只在第二类中局部改变,因为他是最终的,就像我的例子中的 int 一样。为什么主类也发生了变化?

小代码示例:

public class Main {

    private static final ArrayList<String> myList = new ArrayList<>(Arrays.asList("One", "Two"));
    private static final int num = 5;

    public static void main(String[] args) {

        SecondClass second = new SecondClass(myList,num);
        System.out.println("List in Main: "+myList.get(0));
        System.out.println("Num in Main: "+num);
    }
}

public class SecondClass {

    public SecondClass(ArrayList<String> list, int num)
    {
       list.set(0,"Three");
       num = 10;

        System.out.println("List in second: "+list.get(0));
       System.out.println("Num in Second: "+num);
    }
}

我的输出:

List in second: Three
Num in Second: 10
List in Main: Three
Num in Main: 5

我期望的结果是:

List in second: Three
Num in Second: 10
List in Main: One
Num in Main: 5

最佳答案

myList 是不可变的;它指向的对象不是。如果您希望列表的内容不可变,请使用 Collections.unmodifyingList() (或类似 Guava 的 ImmutableList)。

(在方法签名中使用 ArrayList 是一种不好的形式。如果您真的有一个,只需使用 ListRandomAccessList 有充分的理由需要这种行为[你不需要]。)

关于java - 最终静态数组列表在函数中发生了变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44615642/

相关文章:

java - 在循环中的 ArrayList.add() 之后,所有元素都是相同的。为什么?

java - 检查 ArrayList<> 是否包含对象不起作用

java - 如何在 Java 中向文件追加对象?

java - 仅获取有关特定列的元数据信息,而不循环遍历所有列......这可能吗?

java - 使用 ITextPDF 保存 PDF 文件

java - JPA异常: org. hibernate.exception.SQLGrammarException

java - 当任何一个 ListArray 具有重复元素时,计算 ListArray 的数量

java - 如何根据对象变量值的独特性将对象排序/分组到列表中?

java - 在 While 循环中转换 do While

java - 如何使用 PDDocument.loadNonSeq,大型 pdf 剥离器/解析文本技术