Первый вариант всегда создает экземпляр списка массивов, второй - только при вызове конструктора по умолчанию. То есть для второго решения вам придется вызывать конструктор по умолчанию для любого добавляемого вами дополнительного конструктора, например,
public class Whatever {
private final List<String> myList;
public Whatever() {
myList = new ArrayList<String>();
}
public Whatever(String name) {
this();
// Other stuff done
}
public Whatever(List<String> myList) {
this.myList = myList;
}
}
(Второй) «ленивый» метод инициализации может быть лучше, если вы не всегда используете список (например, если вы устанавливаете список в другом конструкторе, как в моем примере) и хотите избежать создания ненужных объектов. (РЕДАКТИРОВАТЬ: я изменил ArrayList на интерфейс и установил его окончательно. Это не было частью вопроса, но это - как упоминалось в комментариях - лучший способ использовать коллекции List).