Oracle java tutorial - posible error con respecto al comentario de Java de autoboxing de caracteres [duplicado]
Esta pregunta ya tiene una respuesta aquí:
¿Tiene el valor de llamada de autoboxing Of ()? 4 respuestasSoy nuevo en JAVA, actualmente estoy aprendiendo la sección de genéricos de tutoriales de Oracle. Creo que hay un error allí, y quiero asegurarme de que no estoy equivocado. Agradeceré tus comentarios.
Vi la siguiente explicación enhttps: //docs.oracle.com/javase/tutorial/java/generics/restrictions.htm
Pair <Entero, Carácter> p = nuevo Par <> (8, 'a');
enga en cuenta que el compilador de Java autoboxes 8 a Integer.valueOf (8) y 'a' al Carácter ('a'):
Pair <Integer, Character> p = new Pair <> (Integer.valueOf (8),nuevo personaje ('a'));
Creo que esto es un error y 'a' en realidad se encuadra automáticamente en Character.valueOf ('a').
Escribí el siguiente programa para verificarlo. como pensé que quizás los genéricos tienen un boxeo especial, probé el método genérico, el método regular y la clase 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 es:
uso del método genérico: valores: un verdadero primero == segundo es verdadero
first == segundo es ciertouso del método regular: valores: a a verdadero primero == segundo es verdadero
first == segundo es ciertouso de clase genérica: valores: un verdadero primero == segundo es verdadero
first == segundo es ciertoPor lo tanto, creo que esto demuestra que 'a' se autoboxing a Character.valueOf.
¿Me estoy perdiendo de algo? ¿Es esta la forma correcta de verificarlo?
Gracias
Eliyahu