首页 > 其他分享 >Integer超过128要用对象比较,否则出问题

Integer超过128要用对象比较,否则出问题

时间:2024-04-22 15:11:45浏览次数:14  
标签:integer1 int 要用 a1 int1 127 128 Integer

一、测试代码

public void testEquals() {
    int int1 = 12;
    int int2 = 12;
    
    Integer integer1 = new Integer(12);
    Integer integer2 = new Integer(12);
    Integer integer3 = new Integer(127);
    
    Integer a1 = 127; //或者写成Integer a1 = Integer.valueOf(127);
    Integer a2 = 127;//或者写成Integer a2 = Integer.valueOf(127);
    
    Integer a = 128;
    Integer b = 128;
    
    System.out.println("int1 == int2 -> " + (int1 == int2));                    
    System.out.println("int1 == integer1 -> " + (int1 == integer1));            
    System.out.println("integer1 == integer2 -> " + (integer1 == integer2));    
    System.out.println("integer3 == a1 -> " + (integer3 == a1));                
    System.out.println("a1 == a2 -> " + (a1 == a2));                            
    System.out.println("a == b -> " + (a == b));                                                    
}
输出结果
1、 int1 == int2 -> true
2、 int1 == integer1 -> true
3、 integer1 == integer2 -> false
4、 integer3 == a1 -> false
5、 a1 == a2 -> true
6、 a == b -> false

看看结果跟我们自己做的是不是都一样。

下面我们就来详细解释一下,为什么是上面的结果。(下面的序号就是对应的是上面的答案序号)

1、int1 == int2 为true,这个我就讲了,这个都知道
2、int1 == integer1,Integer是int的封装类,当Integer与int进行==比较时,Integer就会拆箱成一个int类型,所以还是相当于两个int类型进行比较,这里的Integer,不管是直接赋值,还是new创建的对象,只要跟int比较就会拆箱为int类型,所以就是相等的。
3、integer1 == integer2 -> false,这是两个都是对象类型,而且不会进行拆箱比较,所以不等
4、integer3 == a1 -> false , integer3是一个对象类型,而a1是一个常量它们存放内存的位置不一样,所以也不等,具体存在内存的位置看以看文章:点击打开链接
5、6 看起来是一模一样的为什么一个是true,一个是false,这是因为Integer作为常量时,对于-128到127之间的数,会进行缓存,也就是说int a1 = 127时,在范围之内,这个时候就存放在缓存中,当再创建a2时,java发现缓存中存在127这个数了,就直接取出来赋值给a2,所以a1 == a2的。当超过范围就是new Integer()来new一个对象了,所以a、b都是new Integer(128)出来的变量,所以它们不等。

 

原文链接https://blog.csdn.net/u012386311/article/details/118854829

标签:integer1,int,要用,a1,int1,127,128,Integer
From: https://www.cnblogs.com/robots2/p/18150668

相关文章

  • 【转载】Java函数式编程——为什么new Thread()中要用函数式编程
    面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做。面向对象的思想:做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情.函数式编程思想:只要能获取到结果,谁去做的,怎么做的都不重要,......
  • linux使用官方安装包安装的lazarus如需修改lazarus文件需要用root权限
    最近有网友反馈linux使用官方安装包安装的lazarus,按尝试解决linux下Lazarus2.2.0版代码编辑器和SynEdit不支持中文输入的Bug(2024.02.27解决《修正LinuxLazarusIDE代码编辑器中文输入》后用fpcupdeluxe重新编译lazarus时出错的Bug)-秋·风-博客园(cnblogs.com),修改后重构laz......
  • 为什么python的数据库语句要用参数化构造的方式
    以下是一个python的数据库插入语句self.cur.execute('''INSERTINTObooks(url,title,product_type,price_excl_tax,price_incl_tax,availability,num_reviews,rating,category,describe)VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)&......
  • 扩展中国剩余定理证明及例题 Strange Way to Express Integers
    前置知识中国剩余定理(CRT),逆元;EXCRT是什么我们知道对于\[\begin{equation} \begin{cases} x\equivc_1\(mod\m_1)\\ x\equivc_2\(mod\m_2)\\ .\\ .\\ .\\ x\equivc_i\(mod\\m_i)\\ \end{cases}\end{equation}\]一个一元线性同余方......
  • 扩展中国剩余定理证明及例题 Strange Way to Express Integers
    前置知识中国剩余定理(CRT),逆元;EXCRT是什么我们知道,对于对于\[\begin{equation} \begin{cases} x\equivc_1\(mod\m_1)\\ x\equivc_2\(mod\m_2)\\ .\\ .\\ .\\ x\equivc_i\(mod\\m_i)\\ \end{cases}\end{equation}\]一个一元线性......
  • redis为什么一定要用跳表实现有序集合,却不用平衡树,红黑树或者B+树呢?
    平衡树vs跳表平衡树必须满足所有节点的左右子树高度差不超过1,也就是平衡因子范围为[-1,1]。但是对于范围查询来说,利用平衡树通过中序遍历达到和跳表一样的效果,但是平衡树的每一次插入或者删除操作都需要保证整棵树的绝对平衡,只要不平衡就会通过旋转的方式来重新保持平衡,这个过......
  • [POJ2891]Strange Way to Express Integers公式推导
    没啥事干,想着推个式子玩玩。题目链接题意不过多赘述,直接上过程:由题意得\[\begin{cases}x\equiva_1\,(mod\,\,n_1)\\x\equiva_2\,(mod\,\,n_2)\end{cases}\]展开得\[x=k_1·n_1+a_1=k_2·n_2+a_2\dots①\]移项得\[k_1·n_1=(a_2-a_1)+k_2·n_2\]\[k_1·n......
  • 20211128李杰—— MD5哈希长度延展攻击
    任务描述:在一个使用MD5哈希算法的系统中,管理员使用了一个密钥k和命令cmd的组合来生成每个命令的签名:hash(k||cmd)。你已经获得了一个允许查看文件的命令cmd=viewfile和对应的签名h,但你希望通过哈希长度延展攻击,生成一个新的签名,该签名能够让你执行删除文件的命令(删除文件的命令为......
  • 超大容量 | 瑞芯微RK3588J工业核心板新增16GB DDR + 128GB eMMC配置!
    作为瑞芯微的金牌合作伙伴,创龙科技在2023年9月即推出搭载瑞芯微旗舰级处理器RK3588J的全国产工业核心板——SOM-TL3588。 SOM-TL3588工业核心板是基于瑞芯微RK3588J/RK3588高性能处理器设计的四核ARMCortex-A76+四核ARMCortex-A55全国产工业核心板,Cortex-A76核心主频高达2.......
  • 并发编程之AtomicInteger,AtomicLong,LongAdder
    系列文章目录文章目录系列文章目录前言前言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。AtomicInteger类是系统底层保护的int类型,通过提供执行方法的控制进行......