Чтобы понять, почему это происходит, вам нужно немного узнать о том, как работают строки в Java, потому что базовой реализацией списка в ColdFusion является java.lang.String.
<cfset list = "a,b,c"/>
<cfoutput>#list.getClass()#</cfoutput>
В Java строки являются неизменяемыми и не имеют методов для изменения содержимого строки. Если бы вы сделали следующее в Java, вы бы создали новый экземпляр String и присвоили бы его для каждого оператора:
String s = "abc";
s = "def";
s = s.concat("ghi");
Использование метода listAppend () в ColdFusion создает новый экземпляр String под капотом и возвращает его, таким образом, необходимо делать что-то подобное при добавлении значений в список.
<cfset list = "a,b,c"/>
<cfset list = listAppend(list,'d')/>
<cfoutput>#list#</cfoutput>
Однако, когда вы модифицируете массив с помощью arrayAppend (), вы напрямую модифицируете массив, поэтому нет необходимости заново назначать значение себе, как это требуется с listAppend ().