关于Integer对象的一些小知识
来源:互联网 发布:朝勇投资有限公司 知乎 编辑:程序博客网 时间:2024/05/21 02:36
之前有看见一个题,题就不说了,最终结论是 Integer对象在创建的时候,对于-128~127数字将会不会创建新的对象,而是直接应用常量池中Integer对象。
然后最近,在StackOverflow看到一个比较有意思的问题
public class Test { public static final Test me = new Test(); public static final Integer I = 4; public static final String S= "abc"; public Test() { System.out.println(I); System.out.println(S); } public static Test getInstance() { return me; } public static void main(String[] args) { Test.getInstance(); }}最终运行输出的结果则是
null
abc
为何是这个结果。如果把
public static final Integer I = 4;替换为
public static final int I = 4;那么打印的结果就会是4 和 abc
为何会这样
因为在创建静态常量的时候, Integer I=4 最终调用的是 Integer.valueOf(4),而不是直接在常量池中创建对象。那么导致的则是在初始化的时候,常量池中并没有Integer对象的值。
而String类型 则直接会在常量池中创建对象,所以可以直接调用该值。
所以在第一次初始化常量的时候,Integer 由于内部产生对象调用的是Integer.valueOf()的方法,而常量池中并没有相匹配的值,导致第一次初始化后Integer是一个空值。当第一次初始化结束后,Integer常量对象才会产生相对应的值。
而之后在 new Test();或者调用该实例化方法 getInstance() 是,才会显示Integer常量对象
public static void main(String[] args) {
<span style="white-space:pre"></span>new Test(); Test.getInstance(); }
输出结果为:
null
abc
4
abc
0 0
- 关于Integer对象的一些小知识
- 关于Integer的一些知识
- 关于javaSE面向对象的一些小知识
- Integer 的小知识
- 关于Integer的知识
- 关于Integer自动装箱和拆箱的小知识
- 关于Java编程的一些小知识
- 关于Servlet的一些小知识
- 关于String的一些小知识
- 关于javascript的一些小知识
- 关于navigation的一些小知识
- 关于网络通信的一些小知识
- 关于Win7的一些小知识
- [转载] 关于ckEditor 的一些小知识
- 关于PC的一些小知识
- 关于APK签名的一些小知识
- 关于编译的一些小知识
- 关于linux环境变量的一些小知识
- Java 中的 scanner
- SQL优化避免索引失效
- Mybatis中tinyint(1)数据自动转化为boolean处理
- 学习版本控制工具 git的基本使用
- 坚持#第37天~Java开发大数据实时统计系统
- 关于Integer对象的一些小知识
- 数组中只出现一次的数字
- repo切换xml命令
- 线性顺序存储结构
- cordova打开pdf连接没反应:transferred with MIME type application/pdf: "http://**/**.pdf"
- Cookie和Session的区别
- 网络令牌的解释
- 周三项目4--顺序表应用
- 编译和解释的区别是什么?来看看