StringBuffer в конструкторе Java?

1

Когда я создаю новый объект с 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, но это не так. Есть ли правильный способ сделать это?

  • 6
    Код, который вы закомментировали, будет работать абсолютно нормально. Пожалуйста, покажите короткую, но полную программу, демонстрирующую проблему - я сильно подозреваю, что, пытаясь это сделать, вы обнаружите, что либо она больше не является проблемой (например, вы ее ранее неправильно диагностировали), либо вы нашли проблему в другом месте.
  • 1
    Вы случайно не сказали, что String sNumber = new StringBuilder(num).reverse().toString(); ?
Показать ещё 1 комментарий
Теги:
class
scope
constructor
stringbuffer

1 ответ

3
Лучший ответ

Я предположил, что, поскольку я назвал новый объект StringBuilder/StringBuffer тем же именем, он переопределит значение ранее инициализированной переменной sNumber

Нет, если вы назовете StringBuilder тем же именем, что и поле, оно скроет поле. (Единственный способ получить доступ к полю будет через this.sNumber.)

Вы можете решить эту проблему без временной переменной:

sNumber = new StringBuilder(num).reverse().toString();

(Вы говорите в своем вопросе, что это не работает, но это должно быть. Просто убедитесь, что вы не объявляете sNumber в качестве локальной переменной в конструкторе. Если он все еще не работает, вам нужно включить сообщение об ошибке в свой вопрос.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню