Por favor alguém poderia me explicar porque na linha abaixo, embora a variável seja do tipo Integer aceitou uma atribuição como se fosse int. Porque isso aconteceu, não deveria retornar algum erro. Essa classe tem algum construtor especial?
Quando comecei a aprender C++ tive um pouco (“um pouco” é modo de dizer) de dificuldade com as coisas que o compilador fazia automaticamente por mim, eu que estava acostumado com o Pascal e o C.
O que era mais complicado eram as regras de construtores automáticos. Depois de algum tempo, comecei a entender o que o compilador fazia automaticamente por mim (obviamente vi muitas listagens do assembly gerado pelo compilador, só para ter certeza do que estava acontecendo).
O problema é que o C++ faz coisas automáticas e “inesperadas” demais.
(É diferente de quando você tem uma linguagem como o SQL, que é de nível muito mais alto, mas não faz coisas tão “inesperadas” assim.)
Agora Java está começando a pegar essa “doença” do C++. Esse tipo de conversão automática (autoboxing) é simples e prática, e não é exatamente inesperada, mas abre o caminho para coisas “inesperadas”. É por isso que não aceitaram o “overloading” de operadores em Java: isso iria pavimentar o caminho para muitas coisas extremamente estranhas.