`

Integer.valueOf()方法缓存数字

阅读更多
1.Integer.valueOf()方法基于减少对象创建次数和节省内存的考虑,缓存了[-128,127]之间的数字。此数字范围内传参则直接返回缓存中的对象。
        Integer i1 = Integer.valueOf(12);
        Integer i2 = Integer.valueOf(12);
        Integer i3 = Integer.valueOf(129);
        Integer i4 = Integer.valueOf(129);
        System.out.println(i1==i2);
        System.out.println(i3==i4);
        System.out.println(i1.equals(i2));
        System.out.println(i3.equals(i4));

打印结果如下:
true
false
true
true


2.另如下:
System.out.println(Integer.valueOf("127")==Integer.valueOf("127"));
System.out.println(Integer.valueOf("128")==Integer.valueOf("128"));
System.out.println(Integer.parseInt("128")==Integer.valueOf("128"));

输出是:
true
false
true

valueOf会返回一个Integer(整型)对象,当被处理的字符串在-128和127(包含边界)之间时,返回的对象是预先缓存的。这就是为什么第一行的调用会返回true-127这个整型对象是被缓存的(所以两次valueOf返回的是同一个对象)——第二行的调用返回false是因为128没有被缓存,所以每次调用,都会生成一个新的整型对象,因此两个128整型对象是不同的对象。
   上面的比较中,你实际进行比较的是integer.valueOf返回的‘对象’引用。parseInt()返回的不是整型对象,而是一个int型基础元素。
分享到:
评论

相关推荐

    Java中Integer.valueOf,parsetInt() String.valueOf的区别和结果代码解析

    它和Integer.parseInt()方法的区别在于,Integer.valueOf()方法会根据int范围从[-127,127]的内部缓存中取值,这样可以提高性能。同时,Integer.valueOf()方法也会抛出NumberFormatException异常,如果字符串是null...

    Java Integer.ValueOf()的一些了解

    从源码中我们可以看到,Integer.ValueOf()方法首先判断传入的整数值是否在-128到127之间,如果在这个范围内,就从IntegerCache中取出对应的缓存对象返回,否则就创建一个新的Integer对象。 那么,IntegerCache是...

    Java Integer.valueOf()和Integer.parseInt()的区别说明

    Integer.valueOf() 方法有一个缓存机制,对于 -128 到 127 之间的整型数字,会从缓存中获取,而不是新建对象。这个缓存机制可以提高性能,但也需要注意其使用时的限制。 例如,在比较一个字符串数字是否与某个整型...

    【Java学习】Integer.ValueOf()引发的血案

    当调用`valueOf(int i)`方法时,会首先检查给定的`int`值是否在缓存范围内,如果在则直接返回缓存中的对象,否则创建新的`Integer`对象。 总的来说,理解`Integer.valueOf()`的工作原理和`Integer`对象的缓存机制,...

    java中string和int型的相互转换.doc

    - **字符串拼接**:实际上会调用`String.valueOf()`方法,并且在JDK内部会通过缓存来提高效率。 - **`String.valueOf()`**:直接调用,并利用缓存机制提高性能。 - **可读性**: - **字符串拼接**:语法简洁,...

    Valueof_JAVA源码_java_

    `valueOf`方法通常使用缓存来优化性能,尤其是对于`Integer`和`Character`这类经常需要装箱的操作。例如,`Integer.valueOf(int i)`会在-128到127的范围内直接返回缓存的`Integer`对象,以避免重复创建对象。 在...

    Java中Integer两种转int方法比较

    在Java编程语言中,将`Integer`对象转换为基本数据类型`int`有两种常见的方法:`Integer.parseInt()`和`Integer.valueOf()`。理解这两种方法的区别和应用场景对于编写高效且正确的Java代码至关重要。 首先,我们来...

    张海 复习1

    另一方面,对于-128到127之间的Integer对象,Java提供了缓存机制,因此`Integer.valueOf(-128) == Integer.valueOf(-128)`为真。对于大于127的值,如`Integer.valueOf(128)`,缓存行为未定义,因此比较结果不确定。...

    15Java语法糖与Java编译器1

    Integer.valueOf方法内部有缓存机制,当int值在一定范围内时,会直接返回缓存的对象,以减少对象创建的开销。这里的缓存范围是由IntegerCache的low和high参数决定的,通常情况下,low为-128,high为127,这是因为-...

    Java 基础.pdf_电子版pdf版

    当使用valueOf方法创建Integer对象时,如果值在缓存范围内,会直接从缓存中获取,否则新建一个对象。例如: ```java Integer x = new Integer(123); // 新建对象 Integer y = new Integer(123); // 新建对象,即使...

    java设计模式【之】享元模式【源码】【场景:多缓存可选模式】

    java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 /** * 享元模式(预加载单例) ... * Integer.valueOf() 、Long.valueOf() * 当数字范围超出, short 1字节 (-128 、+127),生成模式为 new 新对象

    Java面向对象(高级)- 包装类(wrapper)的使用

    - `valueOf` 方法:`Integer num = Integer.valueOf(100);`,推荐使用此方法,因为它可以复用已有的对象,减少内存开销。 - 拆箱(unboxing):将包装类对象转换回基本数据类型。 - 直接赋值:`int i = num;` - ...

    src02 Integer

    10. **Integer.valueOf(int i)**: 这个静态方法根据`int`值`i`返回一个`Integer`对象。如果`i`在缓存范围(-128到127)内,它将从`IntegerCache`获取对象,否则创建新的`Integer`实例。 11. **XXXValue**: 这可能是...

    第7讲 int和Integer有什么区别1

    查看`Integer`的源码可以帮助我们更深入地理解其内部机制,比如`Integer.valueOf()`方法如何实现值缓存,以及`Integer`对象的比较操作是如何进行的。 6. **扩展讨论**: - 自动装箱/拆箱发生的时间:这些操作发生...

    Integer类的缓存机制

    `Integer.valueOf(int i)`方法的源码中有一个对`IntegerCache`的引用,这是一个静态内部类,它维护了一个缓存数组,用于存储这个范围内的Integer对象。这样,当多次调用`valueOf`方法并传入相同的值时,就可以避免...

    android string转换为int

    两者的区别在于 `Integer.valueOf()` 可以用于缓存小范围(-128 到 127)内的整数值,提高性能。 ```java String str = "456"; int num = Integer.valueOf(str); ``` 三、`TextUtils.parseInt()` 如果你在使用...

    java中Integer包装类装箱的一个细节详解

    关键在于`Integer.valueOf(int i)`方法。这个方法内部有一个缓存机制,当传入的整数值在-128到127(包括两端)这个范围内时,它会从预先创建好的Integer对象缓存数组中返回一个对象,而不是每次都新建一个Integer...

    Java 基础(2-8) - 知识点.pdf

    通过Integer.valueOf()方法获取这些范围内的数值时,会从缓存池中直接获取或复用对象,而不是每次都创建新的对象。例如: ```java Integer x = new Integer(123); // 创建新对象 Integer y = new Integer(123); // ...

    Integer IntegerCache源码阅读

    当我们使用 `Integer.valueOf()` 方法将字符串或整数值转换为 `Integer` 对象时,Java会进行一些优化以提高性能。在源码中,`IntegerCache` 类起着关键作用。 `IntegerCache` 是一个内部私有静态类,它维护了一个...

    通过实例了解Java Integer类和int的区别

    Integer.valueOf()方法会将int类型的值装箱到Integer对象中,并且在-128到127之间的值会被缓存,以提高性能。 知识点3:Integer比较 在比较两个Integer对象时,我们应该使用equals()方法,而不是==操作符,这是...

Global site tag (gtag.js) - Google Analytics