1 class Test 2 { 3 Test test; 4 }
编译可以通过,没有问题。为什么?类中包含自身,而这个自身又包含自身,这不是无限循环吗?这是因为类类型是引用类型,test其本质上为一个指针,指向真实的类对象,而这个类型并没有new,所以并没有无限循环。但是。如果改为
1 class Test 2 { 3 Test test=new Test(); 4 }
则就是无限循环了,所以编译通不过。
另外
1 class Test 2 { 3 static Test test=new Test(); 4 }
却可以编译通过,这是因为test是静态成员,属于类本身,不输入任何的实例。无论你创建多少个实例,test跟实例都没有任何关系,所以不会在创建实例的时候创建test,也就没有无限循环。故可以编译通过