我是JAVA新手,目前正在学习Oracle教程泛型部分。我想这是个错误,我想确定我没有错。谢谢你的反馈。
我看到下面的解释
https://docs.oracle.com/javase/tutorial/java/generics/restrictions.html
Pair<Integer,Character>p=新对<gt;(8,'a');
注意,Java编译器将autoboxes 8设置为Integer.valueOf(8)和
“a”到字符(“a”)
:
Pair<Integer,Character>p=新对<gt;(Integer.valueOf(8),
新字符('a')
);
我认为这是个错误,而且“a”实际上是自动装箱的
Character.valueOf('a')
.
我写了下面的程序来检查它。我认为也许仿制药有特殊的拳击,我尝试了泛型方法、正则方法和泛型类:
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("=============");
}
}
输出为:
泛型方法用法:
值:a
真的
第一=第二为真
第一=第二为真
常规方法用法:
值:a
真的
第一=第二为真
第一=第二为真
泛型类用法:
值:a
真的
第一=第二为真
第一=第二为真
所以,我认为这说明了“a”是Character.valueOf的自动框。
我遗漏了什么吗?这是检查的正确方法吗?
谢谢。
埃利亚胡