为什么我们不能将两个推断变量分配为彼此的匿名类?

Java 10允许使用var这样的anonymous class

 var a1 = new Object(){}; var a2 = new Object(){}; 

但是这个赋值会抛出一个错误:

 a1 = a2; 

jshell> a1 = a2; | Error: | incompatible types: $1 cannot be converted to $1 | a1 = a2; | ^^

基于错误日志,为什么Java 10不能将两个推断的var作为anonymous class分配给彼此,但它可以对其他类型(如LongString等)执行相同的操作。

每个new Object(){}都会创建一个新类型(匿名类)。 这些类型没有子类型 – 超类型关系,因此无法将a1分配给a2 ,反之亦然。

但是当你有两个long变量时,它们实际上都具有相同的long ,因此它们是可相互分配的。