首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Long.valueOf(0).equals(Integer.valueOf(0))假的?

这个问题涉及到Java编程语言中的基本数据类型和自动装箱机制。

首先,Java中的基本数据类型有两类:整型(如int、long)和浮点型(如float、double)。基本数据类型之间的比较需要注意,因为它们的类型不同,无法直接进行比较。

在这个问题中,我们要比较的是Long.valueOf(0)Integer.valueOf(0)Long.valueOf(0)返回一个Long对象,而Integer.valueOf(0)返回一个Integer对象。它们的类型不同,因此不能直接进行比较。

在Java中,有一个自动装箱机制,它可以将基本数据类型自动转换为对应的包装类对象。例如,int类型的0会自动转换为Integer对象,而long类型的0会自动转换为Long对象。

然而,这个自动装箱机制只适用于基本数据类型和它们对应的包装类对象之间的比较。在这个问题中,我们比较的是Long对象和Integer对象,它们的类型不同,自动装箱机制不适用。

因此,Long.valueOf(0).equals(Integer.valueOf(0))返回false,因为它们的类型不同,无法进行比较。如果要比较它们的值是否相等,可以使用Long.valueOf(0).longValue() == Integer.valueOf(0).intValue()进行比较。这样写会将Long对象和Integer对象转换为基本数据类型进行比较,结果为true

总结:Long.valueOf(0).equals(Integer.valueOf(0))返回false,因为它们的类型不同,无法直接进行比较。如果要比较它们的值是否相等,可以使用Long.valueOf(0).longValue() == Integer.valueOf(0).intValue()进行比较。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么数组下标从 0 开始?

首先,我们来复习下数组定义 数组是一组连续内存空间存储具有相同类型数据,整个排列像一条线一样,是一种线性表数据结构。 ? 那么,问题来了,数组下标为什么要从 0 开始?从 1 开始行不行?...端好你小茶杯,开始进入正题 数组之所以广泛使用,是因为它支持随机访问。 什么叫随机访问? 数据在内存中都是按顺序存放,通过下标直接触达到某一个元素存放位置。 ?...【0】位置 `微` ② 读取上面数组 【9999】位置 `注` 由于基于计算内存地址读取数据,上面两种情况耗费时间是一样,时间复杂度为 O(1) 注意:想要使用随机访问,一定要满足两个条件...: 1、连续内存空间 2、相同类型数据 知识补充: 与随机访问对应是顺序访问 顺序访问:链表在内存中不是按顺序存放,而是通过指针连在一起,访问某一元素,必须从链头开始顺着指针才能找到某一个元素...要知道我们上层API内部很多都会依赖于数组,而互联网应用又讲究一个高并发,一言不合就是千万级QPS,如此高频访问量,这个冗余减运算 就会放大无数倍,产生巨大性能损耗。

88420

对话开源泰斗陆首群教授:中国开源发展应追求0到1爆发性创新,而不是00创新

陆首群教授:中国作为一个创新国家,要追求真正创新,即 0 到 1 爆发性创新,而不是 00“八宝粥”式创新。...所谓零到一创新,既要以模拟未来信息社会(比工业社会高一个社会发展架构)进行构建虚拟空间中“载体、资源、动能(作用力)等要素,作用于现实工业社会(比信息社会低一个社会发展架构)中被考察物理空间中业态...(生产、经济、社会),促使其发生零到一爆发性变化,即促使其数字化转型或智能化重构变化。...另外,未来信息社会与现实工业社会是不同社会发展架构,而数据、信息、知识、智能只能是同一社会发展架构(信息社会)中不同发展阶层,它们更多是反应同一社会发展架构中共性。...云原生是容器化云计算 + 有效 Kubernetes 编排调度,也就是说,“云原生是促进开源软件创新新变量”这句话没有错,但在我出版新书中重点讲述是:“基于开源深度信息技术发展和应用促进了开源创新

23420
  • 20次方为什么等于1?

    理解了十进制计数法,二进制计数法也很简单,计算机使用就是二进制计数法,计算机为什么使用二进制,是因为2进制计数法数字种类少,计算机结构能更简单,表示起来比较容易,比如电路断开电平高低等等。...有没有找出规律,其实就是k^n,当n每减1,数值就变成原来k分之一,所以10^0就是10^1十分之一,也就是1,5^0是5^1五分之一,也就是1,2^0是2^1二分之一,也是1,所以k^0=1。...看到这里你是不是会好奇标题为什么0,其实上面这些基础都是0,如果没有0,就不会有按位计数法,0在其中起是占位作用。...假设要证明一个断言P(n)对于0以上所有整数n都成立,那么使用数学归纳法步骤如下: 1.证明当n=0时候,P(0)成立 2.证明不论n为0以上哪个整数,P(n)成立,则P(n+1)也成立 步骤1...A(n)对于n为0以上所有整数都成立,步骤如下: 1.证明A(0)成立 2.证明不论n为0以上哪个整数,A(n)成立,则A(n+1)也成立 步骤1: 0代进去,表达式值为0,从0加到0也为0,成立

    1.2K20

    Long类型数值比较及反汇编分析源码

    一、问题描述 开发过程中遇到如下问题 Long a = 100L; Long b = 100L; System.out.println(a == b); System.out.println(a.equals...; 在Long.java里重写了equals()方法,先进行类型对比,在进行值对比,所以a.equals(100)输出false; 三、源码分析(反汇编法) 我们先看下面的示例代码,并思考该段代码输出结果...100 2: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/...我们对上述指令进行解读: 偏移为 0 指令为:bipush 100 ,其含义是将单字节整型常量 100 推入操作数栈栈顶; 偏移为 2 指令为:invokestatic #2 // Method...三、解决问题方案 对于Long类型对比,不要用“==”,尽量避免Long类型直接对比 将Long转换成基本类型再进行比较:a.longValue() == b.longValue(),或者0 ==

    46930

    为什么编程语言中数组下标总是从0开始?

    昨天看到一个有意思问题,为什么在我们遇到大多数编程语言里面,数组下标基本都是从0开始? 这是一个简单问题,很少人会有人去思考为什么,但这里面其实是有一定数学逻辑在里面。...那么为什么应该从0开始而不是1呢,这在计算机科学里面是一个有趣概念。...0,所以简单记为0即可,因为数组类型长度都是固定,比如int是32位,long是64位,所以通过起始位置+类型长度就可以推算得到任何一个index值,比如3下标的数据,可以通过[332,332+...b. 1<=i<11 c. 0<i<=10 d. 1<=i<=10 正确标记方法,在自然数范围内应该包含下面的两种情形: (1)子序列可以包含最小自然数0 (2)子序列可以是空 下面我们来看下...首先,对于要求1可以包含最小自然0,我们会发现a和c标记法是没法表示0,除非写成-1 for(i=0;i<N;i++){ sum+= a[i]; } 至此你应该了解为什么数组下标要从0开始了

    2K20

    为什么不是0,1,2,3,4?setTimeout奇怪问题

    网上看到这样一个题目: for(let i=0;i<5;i++){ setTimeout(function(){alert(i)},0) } 它输出顺序并不是0,1,2,3,4,也不是固定某一个顺序数字...为什么是这样呢?...其实这里有三个关键点, 1、let,它声明了一个块级作用域; 2、alert,它引起了js阻塞; 3、setTimeout添加到js队列; 简单讲, 1、js中没有任何可以立即执行代码,它们都是需要被添加到队列中...至于什么时候执行,要看进程队列空闲程度。 3、alert()它会阻塞js执行,此时js进程是暂停。 4、题目中使用是let,这相当于是使用闭包方式来传入值。...这个题目很简单,但包含了几个关键知识点,我把这个题目添加到了先行者旗下js问答小组之中, 在我收到回复邮件中,这个同学回答很靠谱, ?

    66690

    Integer缓存问题引发分析

    1、引言 阿里巴巴Java开发手册在第一章节,编程规约中OOP规约第7条提到: ❝**【强制】**所有整型包装类对象之间值比较,全部使用equals方法比较。...,并不会复用已有对象,这是一个大坑,推荐使用equals方法进行判断。...会缓存-128至127之间赋值? 为什么会缓存这个范围值,而不是其他呢?...❝相信很多人都知道,Integer值范围为-128到127,超过就会创建一个新Integer对象,其实这里值范围在jdk源码中是指缓存值范围 ❞ 那么为什么会缓存这一段区间数值?...1、为什么会缓存这一段区间整数对象呢? ❝通过注释我们可以得知:如果不要求必须新建一个整型对象,缓存最常用值(提前构造缓存范围内整型对象),会更省空间,速度也更快。

    20430

    在 Activity onCreate() 方法中为什么获取 View 宽和高为0

    在 Activity onCreate() 方法中为什么获取 View 宽和高为0 ?...height); } log如下: 12-15 17:04:55.470 29286-29286/cn.codingblock.view I/MyViewActivity: onCreate: width=0...| height=0 如上面代码结果所示,在ActivityonCreate()方法中我们尝试获取控件宽和高,却获取得是0,这是因为 View 绘制和 Activity 生命周期方法并不同步,即使...例如:当 View 树状态或者 View 树内部 View 可见性发生改变时,ViewTreeObserver.OnGlobalLayoutListener 接口 onGlobalLayout(...---- 最后想说是,本系列文章为博主对Android知识进行再次梳理,查缺补漏学习过程,一方面是对自己遗忘东西加以复习重新掌握,另一方面相信在重新学习过程中定会有巨大新收获,如果你也有跟我同样想法

    1.2K30

    为什么0xffffffff是-1?(计算机对整型存储)

    那我们让他们相连,那int顺序就变成了如下: 我们想想中int原码顺序 这块大家可能会困惑,为什么01111111111111111111111111111111 (第一位为0,后面...31个1,这是最大正数补码) + 1 应该为10000000000000000000000000000000(第一位为1,后面31个0,最小负数补码),应该是-0啊,为什么是-2147483648?...):00000000000000000000000000000000 (32个0) 发现+0和-0补码是一样,所以+0和-0在内存中存储也是一样。...(第一位为1,后面31个0原码,发现是10000000000000000000000000000000(第一位为1,后面31个0),他存储就是int负数最小值(-2147483648)。...我们再把上述原码图,升级为补码顺序图: 计算机存储补码顺序 看了上述int补码图,就应该懂了,其实0xffffffff是-1。

    99840

    java 算法中常见问题总结1(代码实现,不包含逻辑)

    : //把最后一个元素替代指定元素,然后数组缩容  Scanner sc =new Scanner(System.in);  int[] arr = new int[]{1,2,4,5,9,8,0};...请输入要删除第几个元素:  3  [1, 2, 0, 5, 9, 8] 日期计算:  1.java中Calendar类用法 例:计算当前时间是星期几 import java.util.Calendar...,需注意,外国第一天是周日,周二是第二天 外国月份是从0开始,如:一月需要设置月份为0 2.时间戳转换 /**  * 日期格式时间戳 转换成字符串 * @param date 时间戳 * @param...SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(new Date(Long.valueOf...("1010",2).toString()   八进制转成十进制    Integer.valueOf("125",8).toString()    十六进制转成十进制    Integer.valueOf

    87030

    【深度揭秘】为什么很多语言数组下标是从0开始

    首先,恭喜你,能够点进来看,已经领先60%开发者了。 因为很多人看到标题可能觉得数组从0开始这不本来就这样吗?...但是你是否好奇想过,为什么呢?按照正常人思维不都是从1开始吗? 所以,我们带着这个疑问往下看。...,而a[3]地址刚好是存储i内存,所以当循环到a[3]时又赋值为0,相当于i=0;所以这个循环永远结束不了,“hello world”会一直打印。...但是如果是做比较偏底层开发就需要关注性能了,性能一丁点提升,影响也是很广泛,所以选择数组比较合适。 回到主题 为什么数组从0开始呢?...从数组存储内存模型来看,下标比较确切定义是“偏移”,如果用a来表示数组首地址,那么a[0]就表示偏移为0位置。a[x]就表示偏移x个类型大小(int 4个字节)位置。

    1.2K20
    领券