返回顶部
首页 > 资讯 > 精选 >Java中为什么1000==1000为false而100==100为true
  • 170
分享到

Java中为什么1000==1000为false而100==100为true

2023-06-17 05:06:52 170人浏览 安东尼
摘要

本篇内容介绍了“Java中为什么1000==1000为false而100==100为true”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!如

本篇内容介绍了“Java中为什么1000==1000为false而100==100为true”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

如果你运行下面的代码

Integer a = 1000, b = 1000;      System.out.println(a == b);//1     Integer c = 100, d = 100;      System.out.println(c == d);//2

你会得到

false
true

基本知识:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们的内容相同。

因此,后面一条语句也应该是false 。

这就是它有趣的地方了。如果你看去看 Integer.java 类,你会发现有一个内部私有类,IntegerCache.java,它缓存了从-128到127之间的所有的整数对象。

所以事情就成了,所有的小整数在内部缓存,然后当我们声明类似——

Integer c = 100;

的时候,它实际上在内部做的是

Integer i = Integer.valueOf(100);

现在,如果我们去看valueOf()方法,我们可以看到

public static Integer valueOf(int i) {       if (i >= IntegerCache.low && i           return IntegerCache.cache[i + (-IntegerCache.low)];       return new Integer(i);     }

如果值的范围在-128到127之间,它就从高速缓存返回实例。

所以…

Integer c = 100, d = 100;

指向了同一个对象。

这就是为什么我们写

System.out.println(c == d);

我们可以得到true。

现在你可能会问,为什么这里需要缓存?

合乎逻辑的理由是,在此范围内的“小”整数使用率比大整数要高,因此,使用相同的底层对象是有价值的,可以减少潜在的内存占用。

然而,通过反射api你会误用此功能。

运行下面的代码,享受它的魅力吧

public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {        Class cache = Integer.class.getDeclaredClasses()[0]; //1       Field myCache = cache.getDeclaredField("cache"); //2       myCache.setAccessible(true);//3        Integer[] newCache = (Integer[]) myCache.get(cache); //4       newCache[132] = newCache[133]; //5        int a = 2;       int b = a + a;       System.out.printf("%d + %d = %d", a, a, b); //     }

“Java中为什么1000==1000为false而100==100为true”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Java中为什么1000==1000为false而100==100为true

本文链接: https://lsjlt.com/news/287266.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java中为什么1000==1000为false而100==100为true
    本篇内容介绍了“Java中为什么1000==1000为false而100==100为true”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!如...
    99+
    2023-06-17
  • 为什么Java 中"1000==1000"为false而"100==100"为true
    这篇文章主要介绍“为什么Java 中"1000==1000"为false而"100==100"为true”,在日常操作中,相信很多人在为什么Java 中"1000==1000"为f...
    99+
    2023-06-15
  • 为什么 MySQL 将“TRUE 或 TRUE 和 FALSE”评估为 true?
    MySQL将“TRUE or TRUE and FALSE”评估为true,因为AND比OR具有更高的优先级,即AND在OR之前被评估。MySQL按照以下方式评估上述语句。首先评估AND运算符 −(TRUE or (TRUE AND FAL...
    99+
    2023-10-22
  • JavaScript中为什么null==0为false而null大于=0为true(个人研究)
    生活中我们在不停的编写代码,写着JavaScript,很少有时间进行概念上的研究。我呢,今天闲来没啥事,研究了一下有关“null”和“0”的关系。希望大家看完了能有所收获。 复制代码...
    99+
    2022-11-15
    null JavaScript
  • 云服务器vps为什么会出现CPU占用100%
    云服务器vps出现CPU占用100%的原因有:1、硬件配置太低,稳定性不好,导致CPU占用100%;2,网站被黑客植入挖矿病毒或恶意脚本 ,导致CPU占用100%;3、CMS后台相对比较成熟导致服务器资源的占用越来越大,从而使vps云服务器...
    99+
    2024-04-02
  • 香港云服务器vps为什么会出现CPU占用100%
    香港云服务器vps出现CPU占用100%的原因有:1、硬件配置太低,稳定性不好,导致CPU占用100%;2,网站被黑客植入挖矿病毒或恶意脚本所致 ,导致CPU占用100%;3、CMS后台相对比较成熟导致服务器资源的占用越来越大,从而使香港云...
    99+
    2024-04-02
  • 使用el-checkbox-group选中后值为true和false遇到的坑怎么解决
    这篇文章主要讲解了“使用el-checkbox-group选中后值为true和false遇到的坑怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“使用el-checkbox-group选...
    99+
    2023-07-02
  • 轻量香港云服务器为什么会出现CPU占用100%
    轻量香港云服务器出现CPU占用100%的原因有:1、硬件配置太低,无法承受网站的访问量,造成资源占用大;2、网站被黑客植入挖矿病毒或恶意脚本 ,导致CPU占用100%;3、某些版本出现BUG或兼容性问题,资源占用大,导致CPU占用100%。...
    99+
    2024-04-02
  • 为什么字节大量用GO而不是Java?
    见字如面,我是军哥。 我看很多程序员对字节编程语言选型很好奇,为此我还特地问了在字节的两位4-1的技术大佬朋友,然后加上自己的思考,总结了一下就以下 2 个原因: 1、 选型上没有历史包袱 字节的早期的程序员大多来自于百度、360,本...
    99+
    2023-10-02
    golang java 开发语言 后端
  • Java线程启动为什么要用start()而不是run()?
    目录1、直接调用线程的run()方法2、调用线程的start()方法3、总结1、直接调用线程的run()方法 public class TestStart { publi...
    99+
    2024-04-02
  • 为什么 Django 是最好的 Web 框架,而 Java 不是?
    Django 和 Java 是两种流行的 Web 开发框架,但它们有很大的不同点。在本文中,我们将探讨为什么 Django 是最好的 Web 框架,而 Java 不是。 首先,Django 是一个高效的 Web 框架,它可以快速地创建 We...
    99+
    2023-07-31
    git django ide
  • 为什么在JAVA中session.invalidate()之后会话不为空
    在Java中,当调用session.invalidate()方法后,会话并不会立即被销毁,而是被标记为无效状态。这是因为在调用inv...
    99+
    2023-09-27
    Java
  • Java中为什么ArrayList初始化容量大小为10
    目录背景为什么HashMap的初始化容量为16?ArrayList的初始化容量是10吗?为什么ArrayList的初始化容量为10?小结背景 看ArrayList源码时,无意中看到A...
    99+
    2024-04-02
  • 为什么我心中TOP1的编程语言是Java?我为什么选择Java?
    文章目录 前言优点跨平台性面向对象编程(OOP)强大的类库和工具支持广泛的应用领域 缺点速度相对较慢内存消耗较大较高的学习曲线 Java 学习路线总结前置知识Web前端基础 后端基础1. Java基础2. 数据库技术...
    99+
    2023-08-16
    java 开发语言 spring boot
  • Java中list集合为空或为null的区别是什么
    本篇内容介绍了“Java中list集合为空或为null的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!list集合为空或为null...
    99+
    2023-06-25
  • Java中为什么start方法不能重复调用而run方法可以?
    初学线程时,总是将 run 方法和 start 方法搞混,虽然二者是完全不同的两个方法,但刚开始使用时很难分清,原因就是因为初次使用时效果貌似是一样的, 如下代码所示: public...
    99+
    2024-04-02
  • Java中为什么需要内部类
    这篇文章给大家分享的是有关Java中为什么需要内部类的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。内部类:定义在类的内部的类为什么需要内部类?典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其...
    99+
    2023-06-17
  • 分析Java中为什么String不可变
    目录常量池便利安全引申问题String在Java中的【引用传递】常量池 Java中我们创建String对象有两种基本方法。 String str1 = "zxhtom"; Str...
    99+
    2024-04-02
  • Java中为什么会占用高资源
    这篇文章主要介绍“Java中为什么会占用高资源”,在日常操作中,相信很多人在Java中为什么会占用高资源问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中为什么会占用高资源”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • Java中为什么HashMap线程不安全
    本篇内容主要讲解“Java中为什么HashMap线程不安全”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中为什么HashMap线程不安全”吧!01、多线程下扩容会死循环众所周知,Hash...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作