Java 使用方法更改链接列表

Java 使用方法更改链接列表,java,Java,我认为该方法不能直接在java中更改对象,但在我看来,我错了 public static void main(String[] args) { LinkedList<Integer> list = new LinkedList<>(); String name = "Boycie"; add(5, list); add(2, lis

我认为该方法不能直接在java中更改对象,但在我看来,我错了

           public static void main(String[] args) {

             LinkedList<Integer> list = new LinkedList<>();
             String name = "Boycie";

                add(5, list);
                add(2, list);
                add(3, list);

                for(Integer integer:list){
                    System.out.print(integer + " ");
                }

                toUpperCase(name);
                System.out.println(name);
            }

            public static void add(int number, LinkedList<Integer> list){
                list.add(number);
            }
            public static void toUpperCase(String name){
                name.toUpperCase();
            }
publicstaticvoidmain(字符串[]args){
LinkedList=新建LinkedList();
String name=“Boycie”;
增加(5,清单);
增加(2,清单);
增加(3,清单);
用于(整数:列表){
系统输出打印(整数+“”);
}
图珀案(姓名);
System.out.println(名称);
}
公共静态无效添加(整数编号,链接列表){
列表。添加(编号);
}
公共静态void toUpperCase(字符串名称){
name.toUpperCase();
}

有人能解释一下为什么这个方法适用于链表,而不适用于字符串对象吗?我认为它对list也不起作用,我需要一个返回类型为LinkedList的方法,就像对String一样。

Java中的字符串是不可变的,所以对字符串的所有操作都返回一个新的副本

因此,您可以执行以下操作以获得预期的结果:

    LinkedList<Integer> list = new LinkedList<>();
    String name = "Boycie";

    add(5, list);
    add(2, list);
    add(3, list);
    for (Integer integer : list) {
        System.out.print(integer + " ");
    }
    String newName = toUpperCase(name);
    System.out.println(name);
    System.out.println(newName);
}

public static void add(int number, LinkedList<Integer> list) {
    list.add(number);
}

public static String toUpperCase(String name) {
    return name.toUpperCase();
}
LinkedList=新建LinkedList();
String name=“Boycie”;
增加(5,清单);
增加(2,清单);
增加(3,清单);
用于(整数:列表){
系统输出打印(整数+“”);
}
字符串newName=toUpperCase(名称);
System.out.println(名称);
System.out.println(新名称);
}
公共静态无效添加(整数编号,链接列表){
列表。添加(编号);
}
公共静态字符串toUpperCase(字符串名称){
返回name.toUpperCase();
}

在java中,如果将变量作为参数传递,它总是传递引用/内存位置,因此,如果更改方法中的值,原始值也将更改。这就是链表正在改变的原因。 现在对于字符串,name.toUpperCase()将返回一个新字符串,其中包含源字符串的大写版本,即它不会更改原始字符串。。要更改最终字符串,请使用以下命令


name=name.toUpperCase()

字符串是不可变的,LinkedList不是。是的,我知道字符串也是这样(我也写过),但它并没有真正回答我的问题。但我得到了我的答案,列表改变是因为方法接受引用,而不是对象,所以如果我理解的话,它与持有对象的引用(在我的例子中是列表变量)相同。
Java是按值传递的,但传递的值是对内存中对象的引用。
。另外,
字符串是不可变的
我刚刚理解了这一点,谢谢您的回答。我只是认为它在堆栈上放置了一个对象,而不是它的引用。