Oracle Java教程-有关字符自动装箱Java注释的可能错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Oracle Java教程-有关字符自动装箱Java注释的可能错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2626字,纯文字阅读大概需要4分钟。
内容图文
![Oracle Java教程-有关字符自动装箱Java注释的可能错误](/upload/InfoBanner/zyjiaocheng/887/fc815eb8b4f549e3a894033e6c9b2226.jpg)
这个问题已经在这里有了答案: > Does autoboxing call valueOf()? 4个
我是JAVA的新手,目前正在学习Oracle教程泛型部分.我认为那里有一个错误,我想确保我没有记错.感谢您的反馈.
我在看到了以下解释
https://docs.oracle.com/javase/tutorial/java/generics/restrictions.html
Pair < Integer, Character > p = new Pair<>(8, ‘a’);
Note that the Java compiler autoboxes 8 to Integer.valueOf(8) and ‘a’ to Character(‘a’):
Pair < Integer, Character > p = new Pair<>(Integer.valueOf(8), new Character(‘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’被自动装箱到Character.valueOf.
我想念什么吗?这是检查的正确方法吗?
谢谢.
埃利亚胡
解决方法:
是的,自动装箱是在各处使用valueOf完成的,以利用所有缓存.例如,使用Character:
public static Character valueOf(char c) {
if (c <= 127) { // must cache
return CharacterCache.cache[(int)c];
}
return new Character(c);
}
这是文档监督.
内容总结
以上是互联网集市为您收集整理的Oracle Java教程-有关字符自动装箱Java注释的可能错误全部内容,希望文章能够帮你解决Oracle Java教程-有关字符自动装箱Java注释的可能错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。