Почему мы не можем назначить две выводимые переменные как анонимный класс друг другу? [дубликат]


На этот вопрос уже есть ответ здесь:

Java 10 позволяет сделать anonymous class с var как:

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

Но это назначение вызовет ошибку:

a1 = a2;

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

На основе журнала ошибок, почему Ява 10 назначить два предполагаемых varкак anonymous class друг с другом, но он может сделать то же для других типов, таких как Long, String, и т. д.?

1 2

1 ответ:

Каждый new Object(){} создает новый тип (анонимный класс). Эти типы не имеют отношения подтип-супертип, поэтому невозможно присвоить a1 a2 и наоборот.

Но когда у вас есть две переменные long, обе на самом деле имеют один и тот же тип long, поэтому они взаимно присваиваются.