Conversões de tipo de referência - 1

"E agora, uma pequena lição de Diego. Breve e direto ao ponto. Sobre conversões de tipo de referência."

"Vamos começar com as variáveis ​​Object. Você pode atribuir qualquer tipo de referência a essa variável ( conversão de alargamento ). No entanto, para fazer a atribuição na outra direção ( conversão de estreitamento ), você deve indicar explicitamente uma operação de conversão:"

Código Descrição
String s = "mom";
Object o = s; // o stores a String
Uma conversão de referência de alargamento típica
Object o = "mom"; // o stores a String
String s2 = (String) o;
Uma conversão de referência de estreitamento típica
Integer i = 123; // o stores an Integer
Object o = i;
Ampliando a conversão.
Object o = 123; // o stores an Integer
String s2 = (String) o;
Erro de execução!
Você não pode lançar uma referência Integer para uma referência String.
Object o = 123; // o stores an Integer
Float s2 = (Float) o;
Erro de execução!
Você não pode lançar uma referência Integer para uma referência Float.
Object o = 123f; // o stores a Float
Float s2 = (Float) o;
Conversão para o mesmo tipo. Uma conversão de referência de restrição.

" Uma conversão de referência de alargamento ou estreitamento não altera o objeto de forma alguma. A parte de estreitamento (ou alargamento) refere-se especificamente ao fato de que a operação de atribuição inclui (não inclui) verificação de tipo da variável e seu novo valor. "

"Este é o raro exemplo em que tudo está claro."

"Para evitar os erros nesses exemplostemos uma maneira de descobrir qual tipo é referenciado pela variável Object: "

Código
int i = 5;
float f = 444.23f;
String s = "17";
Object o = f;                       // o stores a Float

if (o instanceof  Integer)
{
    Integer i2 = (Integer) o;
}
else if (o instanceof  Float)
{
    Float f2 = (Float) o;            // This if block will be executed
}
else if (o instanceof  String)
{
    String s2 = (String) o;
}

"Você deve executar esta verificação antes de cada conversão de ampliação, a menos que tenha 100% de certeza do tipo do objeto."

"Entendi."