Когда я создаю новый объект с StringBuffer/StringBuilder внутри конструктора, кажется, мне нужно создать временную переменную и передать ее вместе с инициализированной переменной класса. То есть, когда я создаю новый экземпляр, изменения, которые я делаю для sNumber (пример ниже) в конструкторе, не влияют на значение переменной объекта - если только я не использую временную переменную. Например:
public class Some_class {
public static class algorithm{
String sNumber = "";
algorithm(String num){
String temp = new StringBuilder(num).reverse().toString();
sNumber = temp;
//the below expression does not work:
//sNumber = new StringBuilder(num).reverse().toString();
}
Я предположил, что, поскольку я назвал новый объект StringBuilder/StringBuffer тем же именем, он переопределит значение ранее инициализированной переменной sNumber, но это не так. Есть ли правильный способ сделать это?
Я предположил, что, поскольку я назвал новый объект StringBuilder/StringBuffer тем же именем, он переопределит значение ранее инициализированной переменной sNumber
Нет, если вы назовете StringBuilder тем же именем, что и поле, оно скроет поле. (Единственный способ получить доступ к полю будет через this.sNumber
.)
Вы можете решить эту проблему без временной переменной:
sNumber = new StringBuilder(num).reverse().toString();
(Вы говорите в своем вопросе, что это не работает, но это должно быть. Просто убедитесь, что вы не объявляете sNumber
в качестве локальной переменной в конструкторе. Если он все еще не работает, вам нужно включить сообщение об ошибке в свой вопрос.)
String sNumber = new StringBuilder(num).reverse().toString();
?