[Java]判断Integer值相等最好不用==最好使用equals

测试代码

    Integer c = 3;
    Integer d = 3;
    Integer e = 321;
    Integer f = 321;

    System.out.println(c == d);
    System.out.println(e == f);

结果输出:

true 

false

Integer为对象判断是否相等还是使用equals最靠谱,int为基本类型,判断是否相等就是可以使用==

其中的原因:

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的值不在-128到127的时候使用==方法判断是否相等就会出错,在这个范围之内的就会没有问题!!!

原文地址:https://www.cnblogs.com/avivaye/p/9322658.html

时间: 2024-11-07 09:42:06

[Java]判断Integer值相等最好不用==最好使用equals的相关文章

判断Integer值相等最好不用==最好使用equals

Integer c = 3;Integer d = 3;Integer e = 321;Integer f = 321;System.out.println(c == d);System.out.println(e == f); 输出 true false Integer为对象判断是否相等还是使用equals最靠谱, int为基本类型,判断是否相等就是可以使用==. 原因: static final Integer cache[] = new Integer[-(-128) + 127 + 1]

判断Integer值相等最好不用==(未整理)

今天在开发中判断两个Integer值相等, Integer a = 3; Duixiang duixiang = new Duixiang(); duixiang = DAO.getDuixiang(); Integer b = duixiang.getB(); System.out.print(a == b);System.out.print(a.equals(b)); 发现a==b时,为false,a.equals(b)为true. 后来发现因为我b的值是从数据中拿出的一个对象的值.a和b的

判断Integer值相等不能用==

今天在开发中判断两个Integer值相等, Integer a = 3; Duixiang duixiang = new Duixiang(); duixiang = DAO.getDuixiang(); Integer b = duixiang.getB(); System.out.print(a == b);System.out.print(a.equals(b)); 发现a==b时,为false,a.equals(b)为true. 后来发现因为我b的值是从数据中拿出的一个对象的值.a和b的

java中Integer值比较不注意的问题

今天,帮人看代码时,发现这个问题,回顾起来,记录下来. 先来看一个代码片段 public static void main(String[] args) { Integer a1 = Integer.valueOf(60); //danielinbiti Integer b1 = 60; System.out.println("1:="+(a1 == b1)); Integer a2 = 60; Integer b2 = 60; System.out.println("2:=

Integer值判断是否相等问题

昨天在开发中遇到一个问题,定义了两个Integer变量,暂且定义为Integer a;  Integer b; 这两个值由前端赋值并传到后台,前台传的是a = 12345, b = 12345,  但我在后台比较的时候 if (a == b),却返回false,好无语啊,不都是123吗?为什么返回false,后来改为equals(),返回true,但其中的有些端倪还不太清楚,现总结下: 我们知道Integer是int的包装类,在jdk1.5以上,可以实现自动装箱拆箱,就是jdk里面会自动帮我们转

(转)java判断string变量是否是数字的六种方法小结

java判断string变量是否是数字的六种方法小结 (2012-10-17 17:00:17) 转载▼ 标签: it 分类: 转发 1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = 0; i < str.length(); i++){ System.out.println(str.charAt(i)); if (!Character.isDigit(str.charAt(i))){ return fal

再学Java 之 Integer 包装类缓存

前言:本博文将涉及的Java的自动装箱和自动拆箱,可以参考 这篇文章 和 官方教程 ,这里不再赘述. 首先,先看一个小程序: public class Main { public static void main(String[] args){ Integer i1 = new Integer(1); Integer i2 = new Integer(1); System.out.println(i1 == i2); Integer i3 = 1; Integer i4 = 1; System.

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

本文涉及到一些JVM原理和Java的字节码指令,推荐感兴趣的读者阅读一本有关JVM的经典书籍<深入Java虚拟机(第2版)>,将它与我在<.NET 4.0面向对象编程漫谈>中介绍的CLR原理与IL汇编指令作个对比,相信读者会有一定的启发.而仔细对比两个类似事物的异同,是很有效的学习方法之一. 1 奇特的程序输出 前段时间,一个学生给我看了一段“非常诡异”的Java代码:   public class testInteger {    public static void main(

Java中的值类型

在打算了解Java的时候,根据C#的经验,了解一下Java中有哪一些值类型,如何判断某个类型为值类型还是引用类型是一件值得做的事情. 在C#中,值类型存放在栈中,不需要垃圾回收,引用类型存放在堆中,需要垃圾回收.将一个值类型转换为引用类型,会引起装箱(创建一个需要垃圾回收的引用类型),在真正使用时,需要拆箱,在装箱拆箱时会产生需要垃圾回收的对象, 如果装箱拆箱太多,对我们程序的性能有较大影响,所以了解哪些是值类型,哪些是引用类型,以方便在开发中注意区分是很有必要的. 看书是一种方式,自己探索也是