Foo имеет строковую переменную-член a, которая является неизменной и должна быть записана каждый раз.
Нет, это не так: он не помечен как final
:
public class Foo {
String a;
...
}
Переменная является полностью изменяемой - вы можете изменить ее, чтобы в любое время ссылаться на другую строку, что вы и делаете в методе burna
.
В настоящее время я не понимаю, почему вы думаете, что это не сработает:
public void burna(String newstr){
a = newstr; /*this should not work: */
}
Это устанавливает значение из a
равным значение из newstr
- которое является ссылкой на строку (или ноль). Это все, что он делает. Я не уверен, что вы имеете в виду под «прожиганием» переменной.
Вы звоните burna
и передаете ссылку на строку с текстом «Totally temp \ n», поэтому a
устанавливается на ссылку на эту строку.
Что вы подразумеваете под «Не должно работать, если newstr
- временная переменная». Нет такой вещи как «временная переменная». Существует переменная local - но объект не уничтожается только потому, что ссылающаяся на него переменная выходит из области видимости. Вас это смущает?
В вашей программе происходит несколько вещей - класс foobar
, вероятно, не помогает вам с точки зрения понимания. Не могли бы вы попытаться упростить ваш код до такой степени, что он все еще сбивает вас с толку, но там меньше всего происходит? Тогда мы могли бы более точно выделить источник путаницы.