Java Integer为什么要使用equals而不会==比较

使用TensorFlow Lite Micro流程记录(带源码) 记录如何使用tensorflow lite micro,以及期间解决的问题 阅读详情
先看一段代码
package com.lang;

/**
 * @author wangyl-910
 * @description
 * @date 2017/11/4
 * @see
 */
public class Integer {
    public static void main(String[] args) {
        java.lang.Integer a = 10;
        java.lang.Integer b = 10;
        java.lang.Integer c = 128;
        java.lang.Integer d = 128;
        int e = 128;
        //print true
        System.out.println(a==b);
        //print false
        System.out.println(c==d);
        //print ture
        System.out.println(c==e);
    }
}

a==b打印true,c==b打印false

a ==b 操作时jdk会做自动装箱操作,即调用Integer.valueof方法后通过==比较,valueOf会对-128 至127的数字做缓存

所以a==b比较的是同一个对像,而c,d是两个不同的对象==时返回false

c==e jvm对c做了拆箱操作 其实是c.intvalue==e它们比较的是值所有打印true

代码如下:

Integer.valueOf源码

/**
     * Returns an {@code Integer} instance representing the specified
     * {@code int} value.  If a new {@code Integer} instance is not
     * required, this method should generally be used in preference to
     * the constructor {@link #Integer(int)}, as this method is likely
     * to yield significantly better space and time performance by
     * caching frequently requested values.
     *
     * This method will always cache values in the range -128 to 127,
     * inclusive, and may cache other values outside of this range.
     *
     * @param  i an {@code int} value.
     * @return an {@code Integer} instance representing {@code i}.
     * @since  1.5
     */
    public static Integer valueOf(int i) {
        assert IntegerCache.high >= 127;
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

类加载器Integer时加载IntegerCache源码

private static class IntegerCache {
        static final int low = -128;
        static final int high;
        static final Integer cache[];

        static {
            // high value may be configured by property
            int h = 127;
            String integerCacheHighPropValue =
                sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
            if (integerCacheHighPropValue != null) {
                int i = parseInt(integerCacheHighPropValue);
                i = Math.max(i, 127);
                // Maximum array size is Integer.MAX_VALUE
                h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
            }
            high = h;

            cache = new Integer[(high - low) + 1];
            int j = low;
            for(int k = 0; k < cache.length; k++)
                cache[k] = new Integer(j++);
        }

        private IntegerCache() {}
    }

==与equals的区别

== 一般用于基本类型比较,==比较对象类型时比较的是引用

equals 用于比较对象类型,Integer,String之类的对像类型都有重写Object方法的equals方法

Integer.equals 源码

/**
     * Compares this object to the specified object.  The result is
     * {@code true} if and only if the argument is not
     * {@code null} and is an {@code Integer} object that
     * contains the same {@code int} value as this object.
     *
     * @param   obj   the object to compare with.
     * @return  {@code true} if the objects are the same;
     *          {@code false} otherwise.
     */
    public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

总结:

基本类型 ==比较值是否相等

对像类型 ==比较是否同一对象,equals比较值是否相等


备注:源码来自JDK1.7

Python气象雷达数据处理实战:用PyCINRAD从基数据到PPI图的完整流程 本文详细介绍了使用PyCINRAD库处理气象雷达基数据并生成PPI图的完整流程,涵盖环境配置、数据读取、反射率与速度数据提取、可视化优化等关键步骤。通过实战案例演示如何从原始雷达数据到专业级PPI图像生成,为气象研究和业务应用提供高效解决方案。 阅读详情

相关推荐

电信光猫隐藏的VOIP功能揭秘:不用座机也能打电话(EasySip实战)

本文揭秘了电信光猫隐藏的VOIP功能,通过EasySip实战演示如何无需座机实现高清通话。详细解析了光猫的SIP协议支持、语音VLAN配置及网络架构优化,帮助用户利用现有设备提升通话质量并扩展设备兼容性,特别适合智能家居和企业级应用场景。

weixin_29268385的博客 755

比较两个Integer,为什么必须使用equals?不用==

作者:码农的一天原文:http://suo.im/5Wd5zBequals和==的区别对于基本类型,比如int、long,进行判等,只能使用==,比较的是直接值,因为基本类型的值 就是其...

程序员闪充宝 3671

GD32F105RBT6 keil工程模板

创建GD32F105RBT6的keil初始基础工程,未来的所有外设驱动都是基于这个基础工程进行扩展。

RMDYBW的博客 1925

Integer可以用equlas吗?

Integer的equlas方法

qq_41569287的博客 5205

Xiaojie雷达之路---毫米波雷达基础知识---中频信号的相位

本篇文章主要介绍毫米波雷达的基础知识中的中频信号的相位 文章目录傅里叶变换的快速回顾中频信号的相位中频信号对物体微小位移的灵敏度如何2个chirps来对一个物体的速度进行测量测量一个振动的物体 傅里叶变换的快速回顾 傅里叶变换是将一个信号从时域中转换到频域中,在时域中的一个正弦信号将在频域中产生一个峰值,在大多数情况下,在频域中的一个信号是一个复数(每个值是一个振幅和相位的向量),表示为AejθAe^{j\theta}Aejθ 在频域中峰值的相位等于正弦函数的初始相位 中频信号的相位 上一篇文章中提到,

XiaoJie的博客 1万+

连接HP C7000 OA管理口操作文档

必备工具:1台便携式笔记本电脑、1根网线 2、 在C7000机箱背面找到 OA管理模块,如图:图标1和2为OA主备管理模块 将网线一端接至左边的OA管理网口,另一端接至便携式笔记本电脑网口,如图下位置: 在C7000液晶面板下查看OA管理口地址,如图,按下液晶面板的OK按钮 然后按下▼按钮调至Enclosure Info这一项后,按下OK按钮,输出界面如图:可以看到当前Active的OA管理口IP地址 比如显示地址为172.16.25.30,则个人笔记本电脑则配置172.16...

马晓援的博客 6011

Java面试小知识点:Integer的等与不等

就常量池来说一说Integer这个int的包装类

Aubergines的专栏 1301

YOLOv8 改进涨点 | 模块即插即用 直接可用

在目标检测任务中,注意力机制能够帮助模型聚焦于图像中的关键区域,显著提升检测精度。。创建模块代码注册模块修改任务解析tasks.py创建YAML配置文件模块核心优势适用场景计算开销SOCA捕获二阶统计信息,增强通道间相关性需要精细特征区分的场景中等SK自适应多尺度核选择多尺度目标检测中等偏高显式特征聚集-分配机制全局上下文建模中等A2-Net双线性注意力,高效全局交互复杂场景理解中等偏高CrissCross线性复杂度全局上下文高分辨率输入,长距离依赖较低。

u012133341的博客 2257

Java判断Integer类型的值是否相等

Java判断Integer类型的值是否相等,Objects.equals(a,b)的说明 工作遇到Integer类型比较,记录于此 常见的比较方式有: 1.== 2.equals() 3.Integer.intValue() 4.Objects.equals(a,b) 1 2 3 4 使用 == 比较的是堆中的地址,数值范围在-128~127是可以比较的,一旦超过范围,就会new 一个对象,地址自然不同。 public static Integer valueOf(int i) { if (i..

gb4215287的博客 7571

【BlueDroid】【BLE】低功耗蓝牙客户端和服务端开发流程解析(超详细)

1. 精讲):SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论2. 欢迎大家关注和订阅,和专栏会持续更新中.....敬请期待!

风云说通信 1924

【学习系列】SAP RAP 29:如何创建Application Jobs(下)

本文介绍了在SAP系统中通过API创建和使用Application Jobs的方法。主要内容包括:1) 创建RAP应用并通过Action调用API创建Jobs;2) 使用事件驱动方式异步更新Job状态;3) 通过URL跳转到标准日志页面;4) 使用Custom Entity获取Job日志;5) 演示遗留接口IF_APJ_DT_EXEC_OBJECT和IF_APJ_RT_EXEC_OBJECT的使用。文章提供了详细的代码示例,展示了如何通过CL_APJ_RT_API=>SCHEDULE_JOB调度作业,

DeveloperMrMeng的博客 375

Java基础-Integer的==和equals方法

Java基础-Integer的==和equals方法 1、首先说下 equals 方法: ​ equals 方法接受的参数为 Object 类型 equals(Object obj),首先会判断参数中的对象 obj 是否是 Integer 同类型的对象,如果是同类型的话再判断值是否相同,如果值也相同的话则返回 true, 值不同的话会返回 false,如果 obj 不是 Integer 类型的话,会返回 false; 基本类型(值类型)之间无法使用 equals 进行比较; 如果 equals 参数为值类

youchitang的博客 3128

【NVIDIA】Jetson Orin Nano系列:烧写Ubuntu22.04

Jeson Orin Nano系列:烧写Ubuntu22.04 电脑主机可以是Ubuntu20.04

郭老二 4894

integer为null_比较两个Integer,为什么必须使用equals?不用==

equals和==的区别对于基本类型,比如int、long,进行判等,只能使用==,比较的是直接值,因为基本类型的值 就是其数值。对应用类型,比如Integer、Long和String,进行判等,需要使用equals进行内容判等。因为引用类型的直接值是指针,使用==的话,比较的是指针,也就是两个对象在内存中的地址,即比较它们是不是同一个对象,而不是比较对象的内容。总结:比较值的内容,除了基本类型只...

weixin_42174176的博客 1370

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Integer比较到底要不要equals

-127 ~ 128 范围得,直接从常量池里获取,所以这时候用比较不会出错。 但是超过该范围的就会new 了,所以推荐还是用equals 吧,毕竟不要显得自己很疏忽的态度 初次之外,还可以用自动拆箱的时候,可以用 比如 Integer.value(299).intValue == 299 ...

u014240299的专栏 304

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java integer equals ==_Android中 Integer对象使用==运算符还是equals()方法比较大小?

最近项目组使用findbugs辅助检测代码问题,其中一个问题提到了Integer对象的值比较问题。虽然心里很清楚,java语言类对象的双等号操作符默认比较的是对象的地址,即是否是同一个对象。可是对于Integer、Long这类基本类型的扩展类,心想存在特殊处理的可能,所以还是查了下资料,主要是解释一些心里的疑惑。疑问?java 能不能重载+、-、 =、==这些运算符java的Integer、Lon...

weixin_28753691的博客 262

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

equals和== integer比较相等

基本类型比较值 相等 用 == 包装类型 用 equals Integer 用的也是 equals 比较相等 切记!!!

封神之路 165

equals与==的区分

区分equals与==的区别

qurious7的博客 205

一个关于Integer的问题

首先看一下这段代码          Integer i1 = 100;         Integer i2 = 100;         if (i1==i2) {             System.out.println("i1==i2");         } else {             System.out.println("i1!

shihuaxian的专栏 680

java小知识点记录:在Integer中什么情况下会用到缓存

Integer在什么情况下会使用到缓存?值在-128到127之间就一定会用缓存么?Integer的比较应该用equals

github_38727595的博客 447

Java中==和equals()的区别

在Java中,==和equals()是两个常用的比较操作符和方法,但它们之间的用法和含义却有着本质的区别。本文将详细解释这两个操作符/方法之间的区别。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1万+

Java中==和equals的区别

==操作符与equals方法的区别

骑个小蜗牛的博客 4万+

两个integer 可以用equals比较吗_比较两个Integer,为什么必须使用equals?不用==

作者:码农的一天原文:http://suo.im/5Wd5zBequals和==的区别对于基本类型,比如int、long,进行判等,只能使用==,比较的是直接值,因为基本类型的值 就是其数值。对应用类型,比如Integer、Long和String,进行判等,需要使用equals进行内容判等。因为引用类型的直接值是指针,使用==的话,比较的是指针,也就是两个对象在内存中的地址,即比较它们是...

weixin_30579759的博客 4530

Integer比较使用==和equals的区别详解

Integer作比较使用==和equals的区别 来,先看图 是不是脑瓜子嗡嗡的,明明是几个相同的数字进行比较,为什么得到的结果却不一样呢? 分析一下 Integer的自动装箱,Integer i=128; 相当于 Integer i=Integer.valueOf(128)知道了这个之后就可以上菜了! //Integer.valueOf源码 low = -128 high=127 public static Integer valueOf(int i) { if (i >=

weixin_43859696的博客 3572

在Java中Integer 和 Long 进行比较 ==问题

Integer和Long == 注意点解析源码测试案例如何比较 解析源码 在Java中基础类型包装类中的Integer和 Long有一个特殊的地方需要注意 在比较值的时候不要用 == 进行比较。 在这里以 Long 类型为例 查看源码: Long.class public static Long valueOf(long l) { final int offset = 128; // -128 到 127 之间的数值会被缓存起来 if (l >= -

weixin_43863895的博客 7688

java中int与Integer用==比较详解

前言: 越是简单的东西,我们往往越是没有去把它明白,但我们大部分时间又常常在用,就像我们今天说的int与Integer的使用,我们程序员基本天天都在用,但是我今天没用详细弄清楚之前我也是不清楚,我们来看看这两个在用==号比较给我们带来的疑问。 先看看下面的代码,看看我们是否都会 @Test public void testEquals() { int int1 = 12; int int2 = 12; ...

RichardGeek的博客 5122
上一篇: web前端性能优化总结
下一篇: jdk 1.7 hashMap源码解读
javaee_ssh
博客等级 码龄18年 42粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值