使用方法更改链接列表

时间:2017-01-13 11:08:09

标签: java

我认为该方法不能直接更改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();
            }

有人会解释我为什么方法适用于Linked List,但它不适用于字符串对象?我认为它也不适用于列表,并且我需要有一个返回类型LinkedList的方法,就像我对String一样。

2 个答案:

答案 0 :(得分:3)

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();
}

答案 1 :(得分:-2)

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

name = name.toUpperCase();