Поменять местами две строки в Java, передав их служебной функции, но без возврата объектов или использования классов-оболочек

Я пытаюсь поменять местами две строки в Java. Я никогда не понимал, что «струны неизменны». Я понимаю это в теории, но никогда не сталкивался с этим на практике.

Кроме того, поскольку String является объектом в Java, а не примитивным типом, я не понимаю, почему следующий код печатает один и тот же результат дважды, а не меняя местами слова!

public static void main(String[] args)
{
    String s1 = "Hello";
    String s2 = "World";

    System.out.println(s1 + " " + s2);

    Swap(s1, s2);

    System.out.println(s1 + " " + s2);
}

public static void Swap(String s1, String s2)
{
    String temp = s1;
    s1 = s2;
    s2 = temp;
}

Я хочу, чтобы он напечатал

Hello World
World Hello

Но он печатает

Hello World
Hello World

Я думал, что s1 и s2 являются ссылками, и поэтому ссылки следует поменять местами, а новые должны указывать на другую соответственно. В чем я ошибаюсь?

8
задан Peter Mortensen 16 September 2016 в 02:49
поделиться