Разница заключается в неизменности и способе объявления списка.
const list = [1, 2, 3] объявляет список констант, который является константой времени компиляции, то есть его значение определяется во время компиляции и не может быть изменено во время выполнения.
var list = const[1, 2, 3] объявляет переменную, содержащую постоянный список, но значение этой переменной можно изменить на другой список позже в вашем коде.
void main() {
const list1 =[1,2,3];
var list2 = const[1,2,3];
list1.add(4); // <--error
list2.add(4); // <--error
list1 = [5]; // <--error
list2 = [5];
list2.add(6);
print(list2);
}
Основное отличие — неизменяемость.
const list =[1,2,3] Это создание постоянного списка, где список является изменяемым. Таким образом, вы можете изменить его элемент, но не можете изменить ссылку на список.
var list= const[1,2,3] В этом случае мы создаем список переменных, значение которых является постоянным. В этом случае и список, и ссылка являются неизменяемыми. Поэтому мы не можем ни изменить элемент списка, ни назначить список различий.
const list1 = [1, 2, 3];
var list2 = const [1, 2, 3];
list1[0] = 5; // This is allowed
list2[0] = 5; // This give you compilation error
Это неправильно и не должно быть принятым ответом. В обоих случаях будет создан неизменяемый объект List
. Единственное отличие состоит в том, что вторая версия позволяет переназначать переменную.
каждое значение, хранящееся в памяти, должно иметь ссылку, указывающую на его местоположение в этой памяти.
var list = [1,2,3];
list
: ссылочная переменная, указывающая на массив целых чисел, равный [1,2,3]
, хранящийся в памяти.
var list= const [1,2,3]
Значение, хранящееся в памяти [1,2,3]
, помечается как const
, где const означает: этот объект полностью постоянен (постоянная времени компиляции), фактически этот объект и его дочерние элементы, если таковые имеются.
но ссылочная переменная все еще не постоянна, она изменяема (может быть изменена, чтобы указывать на любые другие значения того же типа):
list[0] = 10; // fail, because it points to a constant value
list = [5,6]; // pass (just point to another value)
list = [4]; // pass
У вас есть только свободная ссылочная переменная, но постоянного значения.
const list = [1,2,3];
объявление этой ссылочной переменной как const
приводит к следующему:
что означает, что любые изменения запрещены:
list[0] = 5; // fails
list = [2,5] // fails
У вас есть полностью неизменяемый термин как для переменной, так и для значения (значение не может быть изменено, а переменная не может ссылаться на другое значение).
Надеюсь, это вам поможет.
попробуйте запустить свой код, потому что он даст неожиданные результаты (затем проведите рефакторинг вашего ответа), ваш вклад оценен по достоинству.