Разница между addAll()
и присваивания значения переменной является то, что addAll()
согласно docs:
Дописывает все элементы в указанной коллекции в конце этого списка, в том порядке, что они возвращаются на Итератор указанной коллекции.
Это означает, должен ли List
быть ненулевым, любые объекты, добавленные с помощью метода addAll()
будет добавлен к концу.
Назначение переменных, с другой стороны, будет заменить текущий список, хранящийся в this.dataset
, со списком rows
. Поэтому это не добавит ничего к предыдущему списку.
Однако, поскольку метод использует this.dataset.clear()
, который в соответствии с docs:
Удаляет все элементы из этого списка. После этого вызова список будет пустым.
Функциональность этих двух методов одно и то же, как список пуст прежде, чем быть добавлен к или перезаписаны.
Пожалуйста, обратите внимание, чтобы избежать NullPointerException
вероятно, было бы лучше, чтобы добавить какое-то, если-заявление, чтобы проверить, если this.dataset
равно нулю перед вызовом this.dataset.clear();
Во втором примере this.dataset.clear()
также избыточный , так как переменная сразу же перезаписывается.
На первый взгляд кажется, что первое предположение: вы уже объявили переменную как this.dataset = new ArrayList, чтобы она не бросала нулевой указатель где-то до этого вызова, и это стандартная практика. Второй, я думаю, не требует нового вызова. –
sumandas
семантически две операции различны. – Blackbelt
@sumandas, если 'this.dataset' является' null' во втором примере, 'this.dataset.clear()' будет бросать NPE. –