Integer的比较和注意点

简介: Integer的比较和注意点

先看代码:

    public static void main(String[] args) {
        Integer a = new Integer(175);
        Integer b = new Integer(175);
        Integer c = new Integer(120);
        Integer d = new Integer(120);
 
        Integer z = 175;
        Integer x = 175;
        Integer n = 75;
        Integer v = 75;
        System.out.println("a.equals(b) : "+ a.equals(b));
        System.out.println("a==b: " +(a==b));
        System.out.println("c.equals(d) : "+ c.equals(d));
        System.out.println("c==d: " +(c==d));
        System.out.println("z==x: "+ (z==x));
        System.out.println("n==v: "+(n==v));
        System.out.println("z.equals(x): "+ z.equals(x));
        System.out.println("n.equals(v): "+ n.equals(v));
    }

结果:

a.equals(b) : true
a==b: false
c.equals(d) : true
c==d: false
z==x: false
x==v: true
z.equals(x): true
n.equals(v): true

什么原因呢:

Integer有个缓存机制 : -128~127

也就是说,当你声明两个Integer 对象(不使用new)时,如果值是在此范围之内, 使用"==" 结果是true ,但是一旦超过了此范围,则会在堆中重新声明一块地址,此时再用"==" 结果就会返回false

并且 使用"==" 比较两个值相等的使用 new Integer() 生命的对象时,即使值相等,结果也依然是false。因为这两个Integer对象其实是指向两块不同的内存地址的。 有点像String类型。

推荐 : 使用 equalse 比较两个 Integer的值

因为 使用equals 比较不管使用哪种声明方式,结果都可以理解为是比较声明的对象的值。

来看《阿里巴巴Java开发手册》的建议:

image.png

目录
相关文章
|
人工智能 NoSQL Java
LangChain4j 项目概览
LangChain4j 是一个专为 Java 开发者设计的大语言模型 (LLM) 集成框架,旨在简化 Java 应用程序与各种 LLM 提供商的集成过程。该项目受到 Python 的 LangChain、Haystack、LlamaIndex 等框架的启发,为 Java 生态系统提供了强大而统一的 LLM 工具链。
3714 7
|
Java Spring
No qualifying bean of type 'XXXXX' available
该文档描述了Spring框架中`org.springframework.beans.factory.NoSuchBeanDefinitionException`异常的处理方法,该异常是因为无法找到类型为`com.weblog.auth.mapper.UserMapper`的bean导致。解决办法包括在对应的Mapper上添加`@Mapper`注解,并在启动类上添加`@MapperScan`注解以扫描包含Mapper接口的文件夹。
1495 8
|
安全 测试技术 API
掌握 Postman OAuth 2.0 授权:初学指南
OAuth 2.0 代表了 web 安全协议的发展,便于在多个平台上进行授权服务,同时避免暴露用户凭据。它提供了一种安全的方式,让用户可以授权应用程序访问服务。
掌握 Postman OAuth 2.0 授权:初学指南
|
前端开发 Java
springboot集成knife4j接口文档
springboot集成knife4j接口文档
springboot集成knife4j接口文档
|
安全 Java 数据库
Spring Security应用代码示例
【6月更文挑战第12天】Spring Security应用代码示例
289 3
|
前端开发 数据可视化 安全
Spring Boot + vue-element 开发个人博客项目实战教程(十、调试、密码加密和Swagger接口文档)(下)
Spring Boot + vue-element 开发个人博客项目实战教程(十、调试、密码加密和Swagger接口文档)(下)
508 0
|
存储 SQL Java
Mysql数据库表字段设计优化(状态列)
初始状态码(java int 32 long 64),int 可以表示31种(除去0000),long可以表示63种(除去0000),当然不可能将0000赋值给初始状态,一般来讲,选择int还是long是根据具体业务需求来决定的。
1248 0
Mysql数据库表字段设计优化(状态列)
|
JSON Java API
Spring Boot 整合 springdoc-openapi
Spring Boot 整合 springdoc-openapi
|
存储 XML 缓存
从spring源码层面分析循环依赖解决方案的实现原理(下)
从spring源码层面分析循环依赖解决方案的实现原理(下)
347 0
从spring源码层面分析循环依赖解决方案的实现原理(下)