Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle java教程-有关字符自动装箱java注释的可能错误_Java_Autoboxing - Fatal编程技术网

Oracle java教程-有关字符自动装箱java注释的可能错误

Oracle java教程-有关字符自动装箱java注释的可能错误,java,autoboxing,Java,Autoboxing,我是JAVA新手,目前正在学习Oracle教程泛型部分。我认为这是一个错误,我想确保我没有错。我将感谢您的反馈 我当时看到了下面的解释 Pairp=新的Pair(8,'a') 请注意,Java编译器自动将8转换为整数。valueOf(8)和'a'转换为字符('a'): Pairp=新对(Integer.valueOf(8),新字符('a')) 我认为这是一个错误,“a”实际上是自动装箱到Character.valueOf('a') 我编写了以下程序来检查它。因为我认为泛型可能有特殊的装箱,所以

我是JAVA新手,目前正在学习Oracle教程泛型部分。我认为这是一个错误,我想确保我没有错。我将感谢您的反馈

我当时看到了下面的解释

Pairp=新的Pair(8,'a')

请注意,Java编译器自动将8转换为整数。valueOf(8)和'a'转换为字符('a')

Pairp=新对(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("=============");
}
类TestCharacter{
公共无效检查(T第一,T第二){
System.out.println(“值:“+first+”“+second”);
System.out.println(第一个等于第二个);
System.out.println(“first==second是”+(first==second));
System.out.println(“first==second是”+(first==Character.valueOf('a'));
}
}
公共类TestAutoBoxingIssue{
公共静态无效检查1(T第一,T第二){
System.out.println(“值:“+first+”“+second”);
System.out.println(第一个等于第二个);
System.out.println(“first==second是”+(first==second));
System.out.println(“first==second是”+(first==Character.valueOf('a'));
}
公共静态无效检查2(第一个字符,第二个字符){
System.out.println(“值:“+first+”“+second”);
System.out.println(第一个等于第二个);
System.out.println(“first==second是”+(first==second));
System.out.println(“first==second是”+(first==Character.valueOf('a'));
}
公共静态void main(字符串[]args){
char first='a';
字符秒='a';
System.out.println(“通用方法用法:”);
检查1(第一,第二);
System.out.println(“======================”);
System.out.println(“常规方法用法:”);
检查2(第一,第二);
System.out.println(“======================”);
TestCharacter t=新的TestCharacter();
System.out.println(“泛型类用法:”);
t、 检查(第一,第二);
System.out.println(“======================”);
}
}

输出为:

通用方法用法: 价值观:a 真的 first==second是真的

first==second为真 常规方法用法: 价值观:a 真的 first==second是真的

first==second为真 通用类用法: 价值观:a 真的 first==second是真的

first==second为真 因此,我认为这表明“a”是自动装箱到Character.valueOf的

我错过什么了吗?这是检查的正确方法吗

谢谢


Eliyahu

是的,自动装箱是使用
valueOf
在任何地方进行的,以利用任何缓存。例如使用
字符

public static Character valueOf(char c) {
    if (c <= 127) { // must cache
        return CharacterCache.cache[(int)c];
    }
    return new Character(c);
}
公共静态字符值(字符c){

if(c)好的。谢谢。我以为自动装箱是由valueOf完成的,但被教程的评论弄糊涂了。因此,如果这是一个疏忽,那也没关系。谢谢你的反馈。问题的关键是Oracle java教程的评论,我认为这是错误的。因此,我认为这不是另一个问题的重复。