Java装箱的 " == " 的问题
装箱和拆箱
packagecom.xzj.Test;
/*
* @ author thisxzj
* @ create 2019-02-25 10:56
*/
publicclassBase{
publicstaticvoidmain(String[] args) {
finalintNUM=127;
Integeri1=NUM;
Integeri2=Integer.valueOf(NUM);
Integeri3=newInteger(NUM);
System.out.println("i1 ==? i2 "+(i1==i2));
System.out.println("i1 ==? i3 "+(i1==i3));
System.out.println("i2 ==? i3 "+(i2==i3));
System.out.println("i1 equals ? i2 "+(i1.equals(i2)));
System.out.println("i1 equals ? i3 "+(i1.equals(i3)));
System.out.println("i2 equals ? i3 "+(i2.equals(i3)));
}
}
结果:
i1 ==? i2 true
i1 ==? i3 false
i2 ==? i3 false
i1 equals ? i2 true
i1 equals ? i3 true
i2 equals ? i3 true
Integer 缓存池的大小默认为 -128~127。在int的数字在缓存的范围内的时候,可以认为直接数字装箱和valueOf是等价的。他们使用的是用一份资源。
在超过了缓存池的范围的时候:将上面代码中NUM常量变为128
运行的结果:
i1 ==? i2 false
i1 ==? i3 false
i2 ==? i3 false
i1 equals ? i2 true
i1 equals ? i3 true
i2 equals ? i3 true
可以看到,超过了这个范围,Integer对象使用的均不是同一份资源。
以上是Integer为例子,探索了包装类的缓存范围。
基本类型对应的缓冲池如下:
boolean: true 、false
byte:-128 ~ 127
short: -128 ~ 127
int: -128 ~ 127
char:0 ~ 127 对应的char
Java装箱的 " == " 的问题的更多相关文章
- 1.1 JAVA装箱和拆箱以及Java Number & Math&Character 类
JAVA装箱和拆箱 从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了.原文链接: http://www.cnblogs.com/dolph ...
- Java装箱和拆箱的基本概念及使用
Java装箱和拆箱的基本概念及使用 要理解装箱和拆箱的概念,就要理解Java数据类型 装箱:把基本类型用它们相应的引用类型包装起来,使其具有对象的性质.int包装成Integer.float包装成Fl ...
- Java 装箱 拆箱
Java 自动装箱与拆箱 ??什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能. 一般我们要创建一个类的对象的时候,我 ...
- JAVA——装箱和拆箱
Java 将某些基本数据类型自动转换为包装类型的过程称为装箱,相反自动将包装类型转换为基本数据类型的过程称为拆箱. Integer integer_1=1; //装箱 int i=integer_1; ...
- Java 装箱、拆箱 包装器
先说java的基本数据类型.java基本数据类型:byte.short.int.long.float.double.char.boolean 基本数据类型的自动装箱(autoboxing).拆箱(un ...
- java装箱跟拆箱解析
/** * 在jdk1.5之后,java为基本数据类型到对应的应用数据类型提供了自动拆箱装箱操作 * 不管是自动拆箱还是自动装箱都是应用数据类型有的方法,基本数据类型是没有任何方法可调用的 *从概念上 ...
- Java 装箱和拆箱
1.装箱机制 基础类型引用到其包装类型,这样就可以调用其各种方法. 例如,我们声明: Integer a = 1; 其在编译过程中会自动解释成: Integer a = Integer.valueOf ...
- java装箱拆箱
基本数据类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能. 一般我们要创建一个类的对象的时候,我们会这样: Class a = new Class(p ...
- Java装箱和拆箱
https://www.cnblogs.com/dolphin0520/p/3780005.html http://mxdxm.iteye.com/blog/2028196 装箱过程是通过调用包装器的 ...
随机推荐
- centos修改默认启动级别
Linux分为7个启动级别: 0 - 系统停机状态 1 - 单用户工作状态 2 - 多用户状态(没有NFS) 3 - 多用户状态(有NFS) 4 - 系统未使用,留给用户 5 - 图形界面 6 - 系 ...
- C# -- 使用Ping检查网络是否正常
C# -- 使用Ping检查网络是否正常 需引用命名空间: using System.Net.NetworkInformation; 1. 代码实现 try { List<string> ...
- jcrop2.X 取消选框
(原) 官网 0.9.12 API 2.X API 在2.X以下在版本中,api提供了release()方法用于取消选框.但在2.X以上的版本中已经没有这个方法了.于是各种查找,终于解决了如何取消选框 ...
- Shell 全局变量、环境变量和局部变量
Shell 变量的作用域(Scope),就是 Shell 变量的有效范围(可以使用的范围). 在不同的作用域中,同名的变量不会相互干涉,就好像 A 班有个叫小明的同学,B 班也有个叫小明的同学,虽然他 ...
- C# 图片文件与字符串之间的转换
1.将图片文件转化为字符串类型 2.将字符串类型的图片数据转换为本地图片保存
- git客户端的安装及使用
1.git提交全部文件的基本步骤: 1)git status:查看修改内容 2)git add XX :添加XX文件到暂存区,如果修改内容比较多,可以使用git add -A .来一次性添加所有文件( ...
- codeblocks-17.12mingw-nosetup(mingw编译,绿色免安装版)的下载、安装及设置一
一.先进入网址:http://www.codeblocks.org/downloads/,选择Download the binary release. 二.转换网页后,选择codeblocks-17. ...
- webmagic保存数据
使用多线程:
- this.$router.push、replace、go的区别
1.this.$router.push() 描述:跳转到不同的url,但这个方法会向history栈添加一个记录,点击后退会返回到上一个页面. 用法: 2.this.$router.replace() ...
- 使用nio遍历文件夹
1.递归方式: private static void print(File f){ if(f!=null){ if(f.isDirectory()){ File[] fileArray=f.list ...