两个Integer类型比较不能使用==,要使用equals,   == 在-127~128是可以用的,超出这个范围就不行
public static void main(String[] args) throws Exception {
Integer a = -129;
Integer b = -129;
if(a==b){
System.out.print("相等");
}else{
System.out.print("bu 相等");//输出这个
}
}

原因如下:

static final Integer cache[] = new Integer[-(-128) + 127 + 1];
  static {
   for(int i = 0; i < cache.length; i++)
    cache[i] = new Integer(i - 128);
  }

源码中cache已有-128到127,不在这范围的会新new 一个出来,这时比较的是内存地址,不是同一对象.

 

两个Integer比较的更多相关文章

  1. java中两个Integer类型的值相比较的问题

    今天在做一个算法时,由于为了和其他人保持接口的数据类型一致,就把之前的int换为Integer,前几天测了几组数据,和之前的结果一样,但是今天在测其它数据 的时候,突然出现了一个奇怪的bug,由于之前 ...

  2. 两个Integer比较大小需要注意的误区

    通过下面的例子,来了解integer比较大小需注意的几点. eg.定义Integer对象a和b,比较两者结果为:a不等于b Integer a = 1; Integer b = 1; if(a==b) ...

  3. 两个integer比较时为什么有时候会失效?

    当数值不在 -128~127范围时就不会进行缓存操作,它会选择进行new integer()的操作.这样他们被分配到堆里面.[这个可以去查看integer.valueof()的源码].在用==或者!= ...

  4. 为什么Java 两个Integer 中1000==1000为false而100==100为true?

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt346 这是一个挺有意思的讨论话题. 如果你运行下面的代码 1 2 3 4 I ...

  5. 两个Integer变量a和b,值相等,a==b等于多少?

    Integer a = Integer.valueOf(127); Integer b = Integer.valueOf(127);   Integer c = Integer.valueOf(12 ...

  6. 挖掘两个Integer对象的swap的内幕

    public class SwapTest { public static void main(String[] args) throws Exception { Integer a = 1, b=2 ...

  7. 交换两个局部变量Integer的值

    反射是很强大的,谁说的final修饰的就不能改变, 通过反射获取成员变量,之后可以取消访问修饰符,也就是说private的也可以访问, 在修改常量(final修饰的),之后就可以对其做任何操作了 如下 ...

  8. int与Integer的爱恨情仇

    int作为java中元老级的数据类型,可谓无处不在,自从jdk5诞生了Integer,从此不在孤单. 为什么要设计Integer呢?它与int有什么区别? 一.Integer是int的包装类型,是引用 ...

  9. 【转载】C#之int与Java之Integer的区别

    本文涉及到一些JVM原理和Java的字节码指令,推荐感兴趣的读者阅读一本有关JVM的经典书籍<深入Java虚拟机(第2版)>,将它与我在<.NET 4.0面向对象编程漫谈>中介 ...

随机推荐

  1. 三个线程,ABC 10次(volatile+synchronized(2 synchronized可以保证内存可见性,所以去掉status 的volatile修饰符)

    package ThreadABC; public class MyThread extends Thread { public static int status = 0; @Override pu ...

  2. 洛谷题解 CF777A 【Shell Game】

    同步题解 题目翻译(可能有童鞋没读懂题面上的翻译) 给你三张牌0,1,2. 最初选一张,然后依次进行n次交换,交换规则为:中间一张和左边的一张,中间一张和右边一张,中间一张和左边一张...... 最后 ...

  3. 如何在vue+element中实现选择框和穿梭框的根据拼音以及拼音首字母以及汉字的模糊搜索

    1.汉字: 直接添加对应的 filterable     2.拼音: 穿梭框和选择器的实现方式有所不同   选择器:   <1>下载pinyin-match:   npm i --save ...

  4. mysql数据库优化(一)

    在实际项目中,通过设计表架构时,设计系统结构时,查询数据时综合提高查询数据效率 1.适当冗余 数据库在设计时遵守三范式,同时业务数据(对数据的操作,比如资料审核,对某人评分等)和基础数据(比如资料详情 ...

  5. Nginx 负载配置

    简版的,详细参数需要自己微调. nginx.conf http{ upstream name { server 127.0.0.1:8777; server 127.0.0.1:8778; serve ...

  6. 数据库新增“自动添加”类字段 auto_now_add 如何不影响之前数据

    django 中的模版为例:time = models.DateTimeField('创建时间', auto_now_add=True)这样显然是不行的.那么.我们可以考虑先给前面数据一个默认值迁移一 ...

  7. debian apache2 修改默认路径

    1.修改 /etc/apache2/sites-enable/000-default.conf 将DocumentRoot改成你的路径 2.修改 /etc/apache2/apache2.conf & ...

  8. 详解vuex

    一.vuex的作用: vuex是一个专为Vue.js应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件状态,并以相应的规则保证状态以一种可预测的方式变化. 作用:组件之间的通信,大规模的逻 ...

  9. 域名动态解析到动态IP

    一般宽带用户的IP都是动态IP,重连之后IP可能会发生变化. 如果想在其他地方连接家里的设备,或者在家中搭建服务器,就会受到影响. 现在提供一种动态解析域名的方式,只要检测到IP的变化,那么就调用阿里 ...

  10. tail -f 命令暂停方法

    Linux 下查看日志时,使用 tail -f 可以不断的刷新日志信息. 例如: tail -f logs.log 此时要想暂停刷新,使用ctrl+s暂停终端.若想继续终端,使用ctrl+q. 若想退 ...