У меня есть ArrayList, к которому добавляются экземпляры StringBuilders. Я столкнулся с чем-то, о чем не помню раньше.Нечеткое поведение с ArrayList
Когда я добавляю stringBuilder к своему списку массивов, он появляется в списке, затем я возвращаю свой Stringbuilder, чтобы начать строить новую строку (она находится внутри цикла), но когда я возвращаю свой StringBuilder, он также стирает строку из ArrayList.
Мне кажется, что ArrayList хранит указатель на объект StringBuilder и фактически не копирует его. Кто-нибудь знает, как обойти это?
ArrayList<StringBuilder> inbox = new ArrayList<StringBuilder>();
StringBuilder emailMsg = new StringBuilder();
//A loop here with a lot of code then these two lines before it loops back to the top
inbox.add(emailMsg);
emailMsg.setLength(0); //inbox goes back to length=0, nothing in the list
У вас есть только один 'StringBuilder'. В Java нет понятия о неявном копировании объектов, все имеет/передает значение ссылки (указателя). –
@BrianRoach За исключением 'String',' int', 'double',' char' и 'float' – Rainbolt
@John Существует абсолютно ничего, кроме' 'String', и примитивы не могут использоваться как общий тип (и не являются объектами). –