Настройка переменной Java String - ссылка или значение?

Следующий фрагмент кода Java взят из практического экзамена AP Computer Science.

String s1 = "ab";
String s2 = s1;
s1 = s1 + "c";
System.out.println(s1 + " " + s2);

Результатом этого кода является «abc ab» в BlueJ. Однако один из возможных вариантов ответа - «abc abc». Ответ может зависеть от того, устанавливает ли Java ссылку на String как примитивные типы (по значению) или как объекты (по ссылке).

Чтобы проиллюстрировать это, давайте рассмотрим пример с примитивными типами:

int s1 = 1;
int s2 = s1; // copies value, not reference
s1 = 42;

System.out.println(s1 + " " + s2); // prints "1 42"

Но, скажем, у нас были объекты BankAccount , хранящие балансы.

BankAccount b1 = new BankAccount(500); // 500 is initial balance parameter
BankAccount b2 = b1; // reference to the same object
b1.setBalance(0);
System.out.println(b1.getBalance() + " " + s2.getBalance()); // prints "0 0"

Я не уверен, что происходит со строками. Технически они являются объектами, но мой компилятор, кажется, рассматривает их как примитивные типы при установке переменных друг для друга.

Если Java передает строковые переменные, такие как примитивный тип, ответ - «abc ab». Однако, если Java рассматривает строковые переменные как ссылки на любой другой объект, ответ будет «abc abc»

Какой, по вашему мнению, правильный ответ?

17
задан ianonavy 29 April 2011 в 17:39
поделиться