Следующий фрагмент кода 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"
Я не уверен, что происходит с Strings. Они являются технически объектами, но мой компилятор, кажется, рассматривает их как примитивные типы при установке переменных друг в друга.
Если Java передает переменные String, такие как примитивный тип, ответ "abc ab". Однако, если Java рассматривает переменные String как ссылки на любой другой объект, ответом будет "abc abc"
Какой, по вашему мнению, правильный ответ?