Java中的通用VS通配符

Shi*_*ani 5 java generics

我在泛型类下有以下两种方法:

public class Container<S> {
    public void f2(List<Object> l1, List<?> l2) {
        l1 = l2; //compilation error row #1
    }

    public void f3(List<?> c, List<S> l) {
        c = l; //ok row #2
        l = c; //compilation error row #3
    }
}
Run Code Online (Sandbox Code Playgroud)

我真的不懂,为什么第2行还可以-如果我将此方法转移两个列表,一个是对象类型列表,一个是字符串,我应该得到编译错误?

真的很容易理解为什么应该/不应该编译每一行。