首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Java基础

    浅谈Integer缓存机制原理

    (j++); // range [-128, 127] must be interned (JLS7 5.1.7) assert IntegerCache.high >= 127 扩展:Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 -128,127 的相应类型的缓存数据,Character 创建了数值在 0,127 范围的缓存数据,Boolean ,缓存范围是 -128,127,1、2都在范围内,返回的是缓存中的对象,因此输出true,3不在范围内,返回的是新 new 的Integer,因此输出false。 128 在缓存范围外,按道理会 new 出一个Integer对象,为什么输出true呢? a * b : c);思考缓存机制存在的原因:将频繁被使用的对象缓存起来,可以提升读取的效率,这是一个典型的用空间换时间的例子(其实缓存机制都是这个原理),而Java开发者认为-128,127是比较常使用的范围

    37010编辑于 2024-08-19
  • 来自专栏流川疯编写程序的艺术

    leetcode 7 Reverse Integer

    Reverse digits of an integer. If the integer’s last digit is 0, what should the output be? ie, cases such as 10, 100. Did you notice that the reversed integer might overflow? Assume the input is a 32-bit integer, then the reverse of 1000000003 overflows. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows

    41930发布于 2019-01-18
  • 来自专栏计算机视觉与深度学习基础

    Leetcode 7 Reverse Integer

    Reverse digits of an integer.

    59190发布于 2018-01-12
  • 来自专栏java一日一条

    理解Java Integer缓存策略

    首先看一个使用 Integer 的示例代码,展示了 Integer缓存行为。接着我们将学习这种实现的原因和目的。你可以先猜猜下面 Java 程序的输出结果。 Java 中 Integer 缓存实现 在 Java 5 中,为 Integer 的操作引入了一个新的特性,用来节省内存和提高性能。整型对象在内部实现中通过使用相同的对象引用实现了缓存和重用。 这种 Integer 缓存策略仅在自动装箱(autoboxing)的时候有用,使用构造器创建的 Integer 对象不能被缓存。 在程序中第一次使用 Integer 的时候也需要一定的额外时间来初始化这个缓存。 其他缓存的对象 这种缓存行为不仅适用于Integer对象。我们针对所有整数类型的类都有类似的缓存机制。

    1K10发布于 2018-09-18
  • 来自专栏后端架构

    Integer判断相等之内存缓存

    8: invokestatic #7 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer ; 11: astore_2 12: sipush 128 15: invokestatic #7 // Method java #7 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 25: astore (i); }数组缓存的最低最高可以看到系统配置的属性,最高会和127做比较否则127就是最高调试代码可以看到到了127地址都不一样了看看cache的缓存内容从-128到127片段2看到初始化,这下子明白了吗 类缓存初始化 /** * Cache to support the object identity semantics of autoboxing for values between

    81310编辑于 2024-06-11
  • 来自专栏全栈学习之路

    Integer缓存问题引发的分析

    1、引言 阿里巴巴Java开发手册在第一章节,编程规约中OOP规约的第7条提到: ❝**【强制】**所有整型包装类对象之间值的比较,全部使用equals方法比较。 ❝相信很多人都知道,Integer的值范围为-128到127,超过就会创建一个新的Integer对象,其实这里的值范围在jdk源码中是指缓存的值范围 ❞ 那么为什么会缓存这一段区间的数值? 缓存的区间可以修改吗?其它的包装类型有没有类似缓存? 1、源码分析 我们知道, Integer var = ? MAX_VALUE = 0x7fffffff; h = Math.min(i, Integer.MAX_VALUE - (-low) -1); ❞ 这也正是上面源码中缓存范围判断的注释为何用 // will cache 的原因(可以对比一下上面 Integer缓存的注释)。 因此我们可知,虽然此处采用了缓存,但应该不是 JLS 的要求。

    61330编辑于 2023-07-16
  • 来自专栏*坤的Blog

    leetcode 7 Reverse Integer

    class Solution { public: int reverse(int x) { int res = 0; while (x != 0) { int t = res * 10 + x % 10; if (t / 10 != res) return 0; res = t; x /= 10; } return res; } };

    52960发布于 2018-06-04
  • 来自专栏算法修养

    LeetCode 7 Reverse Integer

    题目 c++ class Solution { public: int reverse(int x) { long long int ans=0; int tag=0; while(x) { long long int y =x%10; x/=10; if(y==0&&tag==0) continue;

    46420发布于 2019-06-05
  • 来自专栏JNing的专栏

    leetcode: 7.Reverse Integer

    # # If the integer's last digit is 0, what should the output be? . # # Did you notice that the reversed integer might overflow? # Assume the input is a 32-bit integer, then the reverse of 1000000003 overflows. overflows. # # Note: # The input is assumed to be a 32-bit signed integer # Your function should return 0 when the reversed integer overflows.

    46710发布于 2018-09-28
  • 来自专栏面试指北

    LeetCode 7.Reverse Integer

    问题描述 Given a 32-bit signed integer, reverse digits of an integer. result = result * 10 + abs % 10; abs = abs / 10; } if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) { result = 0; } result = x > 0 ?

    30110发布于 2021-07-23
  • 来自专栏Bingo的深度学习杂货店

    Q7 Reverse Integer

    Given a 32-bit signed integer, reverse digits of an integer. Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows

    71740发布于 2018-04-25
  • 来自专栏笔记本

    Java Integer包装类缓存机制详解

    Java Integer包装类缓存机制详解问题引入在解决力扣第76题「最小覆盖子串」时,我使用了Map<Character, Integer>来记录字符串中各字符的出现次数。 (j++); // range [-128, 127] must be interned (JLS7 5.1.7) assert IntegerCache.high >= 127 重要区别:Integer.valueOf()方法:会使用缓存,对于-128到127范围内的数值,返回缓存中的对象Integer.parseInt()方法:不使用缓存,每次都会创建新的Integer对象示例代码 :Integer a = 127;Integer b = 127;System.out.println(a == b); // true,使用缓存Integer c = 128;Integer d = 128;System.out.println(c == d); // false,超出缓存范围Integer e = Integer.valueOf(100);Integer f = Integer.valueOf

    38621编辑于 2025-07-14
  • 来自专栏一个执拗的后端搬砖工

    jdk源码分析之Integer--缓存

    根据代码结构可以看到IntegerCache是Integer中的一个静态类,有一个私有构造器,对外暴露了三个属性,还有一个静态代码块,主要做的事情就是从虚拟机层面获取要缓存Integer的最大值,然后创建了一个可以理解为长度是 127-(-128) + 1的Integer数组,+1就是要缓存0,最后循环为数组赋值,最后cache[]中存放了-128~-1、0和1~127的数组。 由于静态代码块是在类加载完后和初始化之前执行,所以在调用Integer的任何方法(包含构造器)之前,IntegerCache完成了加载且Integer cache[]完成了初始化,调用方法的时候根据需要能够使用数组中的缓存值 再回到文章最开始的例子中,我们调用的Integer.value(1)和Integer.valueOf(127)其实都是从缓存中取得值,所以也就能够解释为什么a1==a2和b1 == b2了。 以上是对jdk源码中Integer缓存做了一些分析,希望对各位带来帮助,如果有觉得分析不到位或者理解有偏差的,可以直接留言或者私聊我。

    64510发布于 2020-11-19
  • 来自专栏月亮与二进制

    LeetCode笔记:7. Reverse Integer

    问题: Reverse digits of an integer. xStr.charAt(i); } reverse = reverseBuffer.toString(); try { return Integer.valueOf

    32330发布于 2021-11-23
  • 来自专栏攻城狮的那点事

    你真的理解 Integer缓存问题吗?

    问原因则随口就说”Integer缓存了-128到127之间的整数对象“,为什么会缓存?还有其他答案?可能就不知道了。 what??? 难道这不是标准答案?还想咋地? ,如果是-128到127之间的整数,则会使用整数缓存对象,否则就new一个整形对象。 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 11: astore_2 12: sipush 150 15: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer <high> 来设置缓存范围的最大值(包含)。

    1.5K20发布于 2019-08-22
  • 来自专栏JackeyGao的博客

    Leetcode 算法 - 7. Reverse Integer

    Leetcode 算法 - 7. Reverse Integer Posted August 17, 2016 问题链接: 7. Reverse Integer 问题描述: Reverse digits of an integer.

    38920发布于 2018-08-02
  • 来自专栏明明如月的技术专栏

    你真的理解Integer缓存问题吗?

    问原因则随口就说”Integer缓存了-128到127之间的整数对象“,为什么会缓存?还有其他答案?可能就不知道了。 what??? 难道这不是标准答案?还想咋地? (i); } 通过源码和注释可以看到 如果是-128到127之间的整数,则会使用整数缓存对象,否则就new一个整形对象。 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 11: astore_2 12: sipush cache[]; // 省略 } 可以看到可以通过设置虚拟机参数:XX:AutoBoxCacheMax=或 -Djava.lang.Integer.IntegerCache.high= 来设置缓存范围的最大值 另外缓存是 《Java语言规范》的要求,具体可以去语言规范里看。 三、总结 我们看一些文章的时候,不要止步于文章给出的标准答案,否则总是“背”文章,印象不深刻。

    59120发布于 2021-08-31
  • 来自专栏明明如月的技术专栏

    LeetCode 7. Reverse Integer(反转整数)

    题目网址:https://leetcode.com/problems/reverse-integer/description/ 题目要求: Given a 32-bit signed integer, reverse digits of an integer. Assume we are dealing with an environment which could only store integers within the 32-bit signed integer For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows

    46630发布于 2021-08-27
  • 来自专栏章鱼的慢慢技术路

    LeetCode-7. Reverse Integer | 整数反转

    题目 LeetCode LeetCode-cn Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return pop := x % 10 x /= 10 if rev > INT_MAX / 10 || rev == INT_MAX / 10 && pop >7 提交中击败了95.50%的用户 leetcode执行: Runtime: 4 ms, faster than 41.60% of Go online submissions for Reverse Integer Memory Usage: 2.3 MB, less than 14.22% of Go online submissions for Reverse Integer.

    59420发布于 2021-02-05
  • 来自专栏FREE SOLO

    谈谈 Integer 的值缓存范围和对象大小

    关于 Integer 的值缓存 这涉及 Java 5 中另一个改进。构建 Integer 对象的传统方式是直接调用构造器,直接 new 一个对象。 但是根据实践,我们发现大部分数据操作都是集中在有限的、较小的数值范围,因而,在 Java 5 中新增了静态工厂方法 valueOf,在调用它的时候会利用一个缓存机制,带来了明显的性能改进。 按照 Javadoc,这个值默认缓存是 -128 到 127 之间。 那么Integer对象的大小是多少呢? Integer只有一个int类型的成员变量value,所以其对象实际数据部分的大小是4个字节,然后再在后面填充4个字节达到8字节的对齐,所以可以得出Integer对象的大小是16个字节。 因此,我们可以得出Integer对象的大小是原生的int类型的4倍。

    3.2K00发布于 2019-04-18
领券