Я использую строку как блокировку и поэтому хочу, чтобы объект был новым экземпляром. FindBugs жалуется, потому что обычно более эффективно определять строку напрямую (с двойными кавычками). Мой код выглядит так:Подавить предупреждения FindBugs в Eclipse
/** A lock for the list of inputs. */
@edu.umd.cs.findbugs.annotations.SuppressWarnings("DM_STRING_CTOR")
//We want a new String object here as this is a lock.
private final Object inputListLock = new String("inputListLock");
Я делаю что-то неправильно здесь? Плагин Eclipse, FindBugs по-прежнему сообщать об этом как проблеме:
Pattern id: DM_STRING_CTOR, type: Dm, category: PERFORMANCE Using the java.lang.String(String) constructor wastes memory because the object so constructed will be functionally indistinguishable from the String passed as a parameter. Just use the argument String directly.
Почему бы не просто решить проблему? – musiKk
У меня создалось впечатление, что замена нового String («inputListLock») на «inputListLock» может вызвать проблемы, если «inputListLock» используется в другом месте. Определяя строку как новый объект, я думаю, что она избегает этой проблемы, так как тогда будут два объекта со значением «inputListLock». Может быть, это неправильно? – tttppp
Java интернализирует строки и указатели разделов из пула строк, поэтому строки неизменяемы. Возможно, у вас не обязательно есть второй объект, на который вы надеялись ... хорошо, что вы не подавили предупреждение о найденных ошибках. – crowne