Следующий фрагмент кода 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 ссылку как примитивные типы (по значению) или как Objects (по ссылке).
Чтобы дополнительно проиллюстрировать это, давайте рассмотрим пример с примитивными типами:
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»
Какой, по вашему мнению, правильный ответ?