博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中Integer和int
阅读量:5817 次
发布时间:2019-06-18

本文共 943 字,大约阅读时间需要 3 分钟。

  hot3.png

Integer k1 =5 , k2 =5;

  Integer j1 =177 ,j2 =177;

System.out.println(k1==k2);

System.out.println(j1==j2);

你认为呢?既然这么问,肯定是有问题的。看了一下,然后打开java 的source(必须是later jdk1.5的版本,在jdk1.5以前 Integer j1 = 1;这样写会报错,这是因为1.5的自动装箱特性。),得出下面的结论: console输出的应该是true 和false 。

那么下面的程序呢? Integer k1 =5 ,k2 =5; Integer j1 =127 ,j2 =127; System.out.println(k1==k2); System.out.println(j1==j2); 这就当然是输出两个true了。ok下面解释为什么。

 首先看找到源代码中的IntegerCache这个类。

private static class IntegerCache {

private IntegerCache(){}

static final Integer cache[] = new Integer[-(-128) + 127 + 1];

static {

   for(int i = 0; i < cache.length; i++) cache[i] = new Integer(i – 128);

 } }

这个类维护了一个IntegerCache[]的数组,长度为256,即-128到127中间的数。这样,有助于提高程序的效率。 对于用Integer 实例化的方法来赋值的变量,实际上是一个复杂类型数据对象(不像int double 等等这些的简单类型数据对象),但是看到上面的代码,当赋值还是一个在-128到127中间的数的时候,这样是直接调用缓存的,不属于这个范围的就是要实例化了。

就相对于是: Integer j1 = new Integer(127); Integer j2 = new Integer(127); 这样,你还认为j1==j2吗?

转载于:https://my.oschina.net/zhk/blog/130237

你可能感兴趣的文章
图解Ajax工作原理
查看>>
oracle导入导出小记
查看>>
聊一聊log4j2配置文件log4j2.xml
查看>>
NeHe OpenGL教程 第七课:光照和键盘
查看>>
修改上一篇文章的node.js代码,支持默认页及支持中文
查看>>
Php实现版本比较接口
查看>>
删除设备和驱动器中软件图标
查看>>
第四章 TCP粘包/拆包问题的解决之道---4.1---
查看>>
html语言
查看>>
从源码看集合ArrayList
查看>>
spring-boot支持websocket
查看>>
菜鸟笔记(一) - Java常见的乱码问题
查看>>
我理想中的前端工作流
查看>>
记一次Git异常操作:将多个repository合并到同一repository的同一分支
查看>>
CodeIgniter 3.0 新手捣鼓源码(一) base_url()
查看>>
Chrome 广告屏蔽功能不影响浏览器性能
查看>>
vSphere 6将于2月2日全球同步发表
查看>>
Android状态栏实现沉浸式模式
查看>>
让你的APP实现即时聊天功能
查看>>
iOS 绝对路径和相对路径
查看>>