Tutorial do java Oracle - possível erro em relação ao comentário automático de java do personagem [duplicado]
Esta pergunta já tem uma resposta aqui:
A chamada de caixa automática valueOf ()? 4 respostasEu sou novo no JAVA, atualmente aprendendo a seção de genéricos de tutoriais da Oracle. Acho que há um erro lá e quero ter certeza de que não estou errado. Agradeço seu feedback.
Vi a seguinte explicação emhttps: //docs.oracle.com/javase/tutorial/java/generics/restrictions.htm
Pair <Número inteiro, caractere> p = new Pair <> (8, 'a');
Observe que o compilador Java autoboxes 8 a Integer.valueOf (8) e 'a' para Personagem ('a'):
Pair <Inteiro, Caractere> p = novo Par <> (Integer.valueOf (8),novo caractere ('a'));
Acho que isso é um erro e 'a' é na verdade uma caixa automática para Character.valueOf ('a').
Eu escrevi o seguinte programa para verificá-lo. como pensei que talvez os genéricos tenham boxe especial, tentei o método genérico, o método regular e a classe genérica:
class TestCharacter<T>{
public <T> void check( T first, T second){
System.out.println("values: " + first + " " + second);
System.out.println(first.equals(second));
System.out.println( "first == second is " + (first == second) );
System.out.println( "first == second is " + (first == Character.valueOf('a')) );
}
}
public class TestAutoBoxingIssue{
public static <T> void check1( T first, T second){
System.out.println("values: " + first + " " + second);
System.out.println(first.equals(second));
System.out.println( "first == second is " + (first == second) );
System.out.println( "first == second is " + (first == Character.valueOf('a')) );
}
public static void check2( Character first, Character second){
System.out.println("values: " + first + " " + second);
System.out.println(first.equals(second));
System.out.println( "first == second is " + (first == second) );
System.out.println( "first == second is " + (first == Character.valueOf('a')) );
}
public static void main(String[] args){
char first = 'a';
char second = 'a';
System.out.println("generic method usage: ");
check1( first, second );
System.out.println("=============");
System.out.println("regular method usage: ");
check2( first, second );
System.out.println("=============");
TestCharacter<Character> t = new TestCharacter<>();
System.out.println("generic class usage: ");
t.check(first, second );
System.out.println("=============");
}
}
output é:
uso do método genérico: valores: um verdadeiro primeiro == segundo é verdadeiro
first == segundo é verdadeirouso do método regular: valores: um verdadeiro primeiro == segundo é verdadeiro
first == segundo é verdadeirouso de classe genérica: valores: um verdadeiro primeiro == segundo é verdadeiro
first == segundo é verdadeiroEntão, acho que isso demonstra que 'a' é autoboxed para Character.valueOf.
Estou esquecendo de algo? Essa é a maneira correta de verificar?
Obrigado
Eliyahu