首页
学习
活动
专区
工具
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,如此高频的访问量,这个冗余的减运算 就会放大无数倍,产生巨大的性能损耗。

89220

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

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

26320
  • 2的0次方为什么等于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.3K20

    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 ==

    47730

    string null和“”的区别 str == null; .equals(str); str.length 0; str.isEmpty();的区别

    1、str == null; 2、"".equals(str); 3、str.length 0; 4、str.isEmpty(); 注意:length是属性,一般集合类对象拥有的属性,取得集合的大小...length(); 说明: 1、null表示这个字符串不指向任何的东西,如果这时候你调用它的方法,那么就会出现空指针异常。 2、""表示它指向一个长度为0的字符串,这时候调用它的方法是安全的。 3....对象用equals比较,              null用等号比较。...如果str1=null;下面的写法错误: if(str1.equals("")||str1==null){ } 正确的写法是 if(str1==null||str1.equals("")){ //所以在判断字符串是否为空时...= 0) { }

    6600

    为什么编程语言中数组的下标总是从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问答小组之中, 在我收到的回复邮件中,这个同学的回答很靠谱, ?

    66890

    Integer缓存问题引发的分析

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

    22430

    在 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 如上面代码结果所示,在Activity的onCreate()方法中我们尝试获取控件的宽和高,却获取得是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。

    1.1K40

    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

    87230
    领券