博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Integer ,==,int 的使用
阅读量:6546 次
发布时间:2019-06-24

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

面试比较常见的题目:自己也经常忘记,所以就记下来了

上代码:

1 Integer a = 1000,b=1000;  2 Integer c = 100,d=100;  3   4 System.out.println(a==b);  5 System.out.println(c==d);

输出的正确结果分别是  falsetrue

原因:看Integer.java类

public static Integer valueOf(int i) {        return  i >= 128 || i < -128 ? new Integer(i) : SMALL_VALUES[i + 128];    }      /**    * A cache of instances used by {
@link Integer#valueOf(int)} and auto-boxing */ private static final Integer[] SMALL_VALUES = new Integer[256]; static { for (int i = -128; i < 128; i++) { SMALL_VALUES[i + 128] = new Integer(i); } }

当声明Integer a=100 的时候,会进行自动装箱操作,即调用 valueOf() 把基本数据类型转换成Integer对象,valueOf()方法中可以看出,

程序把 -128—127之间的数缓存下来了(比较小的数据使用频率较高,为了优化性能),所以当Integer的对象值在-128—127之间的时候是

使用的缓存里的同一个对象,所以结果是true,而大于这个范围的就会重新new对象。

 

2. Integer 和 int

上代码:

Integer a = new Integer(1000);  int b = 1000;  Integer c = new Integer(10);  Integer d = new Integer(10);  System.out.println(a == b);  System.out.println(c == d);

正确答案:true ,false

解析:

第一个:值是1000,肯定和缓存无关,但是b的类型是int,当int和Integer进行 == 比较的时候 ,java会将Integer进行自动拆箱操作,

再把Integer转换成int,所以比较的是int类型的数据,   so 是true

第二个:虽然值是10 在缓存的范围内,但是 c,d都是我们手动new出来的,不需要用缓存, so 是false

 

 

 

 

---------------------------------------------------------------------阿纪----------------------------------------------------------------------

 

转载于:https://www.cnblogs.com/sunjiguang/p/5685002.html

你可能感兴趣的文章
制作docker基础镜像
查看>>
MySQL主从问题
查看>>
ThinkPHP/---遍历一维数组
查看>>
CSS学习笔记2
查看>>
windows系统进程解析
查看>>
RabbitMQ 安装
查看>>
Directx11教程38 纹理映射(8)
查看>>
opengl 教程(3) 在窗口画三角形
查看>>
2011
查看>>
CSS单行、多行文本溢出显示省略号(……)
查看>>
CPU Usage Sampling Profiles (cpu=samples)
查看>>
uva-387-暴力枚举
查看>>
单纯形法C++实现
查看>>
【12c OCP】最新CUUG OCP-071考试题库(50题)
查看>>
【Oracle 12c】最新CUUG OCP-071考试题库(53题)
查看>>
skipfish源码
查看>>
ggplot 绘制热图
查看>>
Merge k Sorted Lists
查看>>
3proxy代理软件文档说明
查看>>
mac host 修改
查看>>