I curious why you titled this
thread, "Collection Issue". Do you mean you're most interested in how these cases would be treated by the garbage collector? If so, the answer is, "not at all".
Both a and b are referring to object of the same type, i.e., an ArrayList. However, code using b would have access to the full interface of methods provided by ArrayList and its base classes, while code using a would only have access to the subset of methods defined by the List interface plus defined by java.lang.Object, the common ancestor of all
Java classes. If the code needed to call a method from ArrayList on a that wasn't part of List or Object, then it would have to cast a to an ArrayList first.
However, there aren't any methods I can think of that ArrayList adds to the List interface, so that difference is moot. You would have to cast a to an ArrayList to pass it to any method taking an ArrayList parameter, or to return it from a method declaring an ArrayList return value.