Я знаю, что приведенные выше ответы дают правильный результат. Но я просто хочу дать небольшое объяснение.
1) давайте начнем с
var sale: Int? = null
если блок инициализации предшествует объявлению свойств, блок инициализации просто принимает имена своих свойств, а не присвоенные им значения (даже если бы это было var sale: Int? = 4, он бы проигнорировал 4) . Он присваивает им значения по умолчанию, в вашем случае null, , но этот null НЕ тот, который вы назначили, это значение по умолчанию для свойства, допускающего значение null. Таким образом, если это была var sale: Int = 4, значение продажи в блоке init было бы 0 (значение по умолчанию Int). Затем вы присвоили 5 продаже . После завершения блока инициализации проверяется свойство sale . Если этому свойству было присвоено значение по умолчанию (в вашем случае null), оно просто игнорирует присвоение (оставляя его текущее значение, равное 5), в противном случае оно снова переназначает свойство (так, если бы это было var sale: Int? = 4, он снова переназначит его на 4)
Но, если инициализация происходит после объявления свойства, все должно быть ясно и, как ожидалось;).
2) давайте обратимся к
private var saleContent: ArrayList = ArrayList ()
в этом случае берется имя свойства saleContent (не ArrayList ()), и поскольку для этого нет значения по умолчанию, ему ничего не присваивается. Внутри блока инициализации вы назначили (1, 2, 3), который изменил свое значение с не назначенного на (1,2,3). Но когда блок инициализации завершился, он был переназначен на (ArrayList ()), потому что ArrayList () не является значением по умолчанию для ArrayList.
но если поместить свойства выше init, он работает как обычно.
private var sale1: Int? = null
private var sale2: Int? = 3
private var sale3: Int = 0
private var sale4: Int = 9
private var saleContent: ArrayList<Int>? = null
lateinit var saleContent2: ArrayList<Int>
если вы поиграете с этими значениями, я надеюсь, вы поймете больше.
Но как правило, я бы посоветовал поместить блок инициализации после объявления свойства, чтобы быть в безопасности.