一段关于AbstractList的java代码有些不解, 望大神指教, 不胜感激

static List<Integer> intArrayAsList(final int[] a){
    if(a == null)
        throw new NullPointerException();

    return new AbstractList<Integer>() {

        @Override
        public Integer get(int i) {
            return a[i];
        }

        @Override
        public int size() {
            return a.length;
        }

        @Override
        public Integer set(int i, Integer val){
            int oldVal = a[i];
            a[i] = val;
            return oldVal;
        }

    };
}

为什么返回的List就已经填充了数组a的值, 这个过程是什么时候发生的, 是如何发生的?

返回的是实现AbstractList接口的匿名对象,这个匿名对象将参数传入的数组a包装成一个list。不存在“填充”只是给int[] a穿了马甲。