Oracle Java Tutorial - возможная ошибка, связанная с автобоксом комментариев Java-комментария [дубликаты]
На этот вопрос уже есть ответ:
Делает ли автобокс вызов valueOf ()? 4 ответаЯ новичок в JAVA, в настоящее время изучаю раздел Обучающие материалы по Oracle. Я думаю, что там есть ошибка, и я хочу убедиться, что я не ошибаюсь. Я буду благодарен за ваш отзыв.
Я видел следующее объяснение наhttps: //docs.oracle.com/javase/tutorial/java/generics/restrictions.htm
Pair <Integer, Character> p = новая пара <> (8, 'a');
Обратите внимание, что компилятор Java автоматически вставляет 8 в Integer.valueOf (8) и 'a' to Character ('a'):
Pair <Integer, Character> p = новая пара <> (Integer.valueOf (8), новый символ ('а'));
Я думаю, что это ошибка, а 'a' автоматически помечается как Character.valueOf ( 'а').
Я написал следующую программу, чтобы проверить это. так как я думал, что у дженериков есть специальный бокс, я попробовал дженерик-метод, обычный метод и дженерик-класс:
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:
общее использование метода: значения: a a true first == second is true
first == секунда вернарегулярное использование метода: значения: a a true first == second is true
first == секунда вернаобщее использование класса: значения: a a true first == second is true
first == секунда вернаТак что, я думаю, это показывает, что 'a' автоматически помещается в Character.valueOf.
Я что-то пропустил? Это правильный способ проверить эт
Благодарность
Элиягу