Integer比较值的时候小心使用
package integerdemo; public class IntegerDemo { public static void main(String[] args) {
//-128--127之间
Integer i1 = 100;
Integer i2 = 100; if( i1 == i2){
System.out.println("i1 == i2");
}else{
System.out.println("i1 != i2 ");
} //大于127
Integer i3 = 200;
Integer i4 = 200; if( i3 == i4){
System.out.println("i3 == i4");
}else{
System.out.println("i3 != i4 ");
} }
}
运行结果:
i1 == i2
i3 != i4
以上是靠整型数的自动拆装箱实现的,而两者的结果却不相同。
原因在于,在进行自动拆装箱时,编译器会使用Integer.valueof()来创建Integer实例。
2、以下是Integer.valueof()的源代码:
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
简单地解释这段代码,就是如果传入的int在IntegerCache.low和IntegerCache.high之间,那就尝试看前面的缓存中有没有打过包的相同的值,如果有就直接返回,否则就创建一个Integer实例。IntegerCache.low 默认是-128;IntegerCache.high默认是127.
注:如果要比较两个对象的内容是否相同,尽量不使用== 或者!= 来比较,可以使用equal()来实现。
Integer比较值的时候小心使用的更多相关文章
- Java 包装类Integer的值比较
对于包装类型Integer的值比较与int的值比较是不同的: public class Java_Val_Compare { public static void main(String[] ar ...
- 一、基础篇--1.1Java基础-int 和 Integer 有什么区别,Integer的值缓存范围
int和Integer的区别 int是基本数据类型,Integer是int的包装类. Integer必须实例化后才能使用,int变量不需要. Integer实际是对象的引用,生成一个新对象实际上是生成 ...
- 关于int,integer初始值问题
- Integer取值范围和NumberFormatException的解决
项目有个查询当地新闻的接口,从GEO文件中取得code,后台查询. 下午测试的时候查询日本:3920000000,结果报java.lang.NumberFormatException,数字格式化异常, ...
- 交换两个局部变量Integer的值
反射是很强大的,谁说的final修饰的就不能改变, 通过反射获取成员变量,之后可以取消访问修饰符,也就是说private的也可以访问, 在修改常量(final修饰的),之后就可以对其做任何操作了 如下 ...
- java中两个Integer类型的值相比较的问题
今天在做一个算法时,由于为了和其他人保持接口的数据类型一致,就把之前的int换为Integer,前几天测了几组数据,和之前的结果一样,但是今天在测其它数据 的时候,突然出现了一个奇怪的bug,由于之前 ...
- 关于 Integer 值比较的问题
今天刚好遇到这样的问题,别的不说,先上代码 public class TestInteger { public static void main(final String[] args) { fina ...
- [Java]判断Integer值相等最好不用==最好使用equals
测试代码 Integer c = ; Integer d = ; Integer e = ; Integer f = ; System.out.println(c == d); System.out. ...
- 判断Integer值相等最好不用==最好使用equals
Integer c = 3;Integer d = 3;Integer e = 321;Integer f = 321;System.out.println(c == d);System.out.pr ...
随机推荐
- php的实参和形参
1.实参是调用函数时候的参数; 2.形参是声明函数时侯的参数, 例如 public function demo($a,$b) { return ; } 如果声明的函数如上,调用时dem ...
- 转Delphi中Create(nil),Create(self),Create(Application)区别
Create(nil);//需要自己释放 Create(Self);//当Self释放时自动触发释放 Create(Application);//当Application释放时自动释放 Create( ...
- Delphi的StringReplace[转]
原文:http://blog.csdn.net/genispan/article/details/4458319 function StringReplace (const S, OldPattern ...
- HDU 1258 Sum It Up(DFS)
题目链接 Problem Description Given a specified total t and a list of n integers, find all distinct sums ...
- docker的一些命令
转自:http://blog.csdn.net/wsscy2004/article/details/25878363 查看容器的root用户密码 docker logs <容器名orID> ...
- MySQL 的一个Bug?
在 my.ini 中的 [mysqld] 段设置 mysql basedir 和 datadir,如下: #Path to installation directory. All paths are ...
- FireFox站点标识按钮
Firefox 的站点标识按钮可以为您提供有关您访问的网站的详细信息.通过站点标识按钮,您可以了解到站点的加密信息.验证信息.网站所有者和网站验证者.这有助于避免恶意网站获得您的重要信息. 站点标识按 ...
- 终于下决心在cnblogs上安家了,^_^
以前在这个地方学到了很多东西,希望在这里安家以后,自己也可以有很多成长. mark一下,~~
- VMware 虚拟机(linux)增加根目录磁盘空间
今天查看学校的监控报修系统,不能访问了!!!系统运行很慢,用top命令查看发现内存使用率90%,用"df -h ”查看“/”目录使用率已达到80%,导致系统运行很慢.我用以下方法扩大根目录磁 ...
- ASP.NET 读数据库绑定到 TreeView 递归方式
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...