`
haohao-xuexi02
  • 浏览: 215567 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

new Integer和Integer.ValueOf区别

    博客分类:
  • java
阅读更多
Integer a=new Integer(1)

Integer a=Integer.valueOf(1);

两个都是得到一个Integer对象,但是Integer.valueOf的效率高。为什么呢?因为Integer.valueOf用到了缓存。看看Integer.valueOf的代码:

Java代码
1.<SPAN style="FONT-SIZE: small">    public static Integer valueOf(int i) {  
2.    final int offset = 128;  
3.    if (i >= -128 && i <= 127) { // must cache  
4.        return IntegerCache.cache[i + offset];  
5.    }  
6.        return new Integer(i);  
7.    }</SPAN> 
    public static Integer valueOf(int i) {
    final int offset = 128;
    if (i >= -128 && i <= 127) { // must cache
        return IntegerCache.cache[i + offset];
    }
        return new Integer(i);
    }


当传入的整数i:-128<i<=127时,从缓存里取出整数对应的Integer对象,否则创建一个Integer对象。基本上平时的程序中,这个范围的整数是最常用的。




  IntegerCache是什么?看看源码

Java代码
1.<SPAN style="FONT-SIZE: small">    private static class IntegerCache {  
2.    private IntegerCache(){}  
3. 
4.    static final Integer cache[] = new Integer[-(-128) + 127 + 1];  
5. 
6.    static {  
7.        for(int i = 0; i < cache.length; i++)  
8.        cache[i] = new Integer(i - 128);  
9.    }  
10.    }</SPAN> 
    private static class IntegerCache {
    private IntegerCache(){}

    static final Integer cache[] = new Integer[-(-128) + 127 + 1];

    static {
        for(int i = 0; i < cache.length; i++)
        cache[i] = new Integer(i - 128);
    }
    }


可见,IntegerCache预先创建了这些Integer对象。




所以,要注意的是,new Integer返回的永远是不同的对象,但是当整数范围在-128<i<=127时,Integer.valueOf返回的是同一个对象。看看下面代码:

Java代码
1.<SPAN style="FONT-SIZE: small">        Integer a=new Integer(1);  
2.        Integer b=new Integer(1);  
3.         
4.        //整数范围在-128到127之间,返回的是同一个对象  
5.        Integer c=Integer.valueOf(1);  
6.        Integer d=Integer.valueOf(1);  
7.         
8.        //返回的不是同一个对象  
9.        Integer e=Integer.valueOf(200);  
10.        Integer f=Integer.valueOf(200);  
11.         
12.        System.out.println(a==b);  
13.        System.out.println(c==d);  
14.        System.out.println(e==f);</SPAN> 
        Integer a=new Integer(1);
        Integer b=new Integer(1);
      
        //整数范围在-128到127之间,返回的是同一个对象
        Integer c=Integer.valueOf(1);
        Integer d=Integer.valueOf(1);
      
        //返回的不是同一个对象
        Integer e=Integer.valueOf(200);
        Integer f=Integer.valueOf(200);
      
        System.out.println(a==b);
        System.out.println(c==d);
        System.out.println(e==f);


输出为

false
true
false




结论:在没有对Integer创建有特殊要求时,比如纯数字计算或比较,最好用Integer.valueOf。


原文:http://jameswxx.iteye.com/blog/808747
分享到:
评论

相关推荐

    Java Integer.ValueOf()的一些了解

    这是因为在Integer.ValueOf()方法中,会首先判断传入的整数值是否在-128到127之间,如果在这个范围内,就从IntegerCache中取出对应的缓存对象返回,因为i01和i02都是59,所以他们实际上是同一个对象的引用。...

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

    Java Integer.valueOf()和Integer.parseInt()的区别说明 Java 中的 Integer 类中有两个静态方法,Integer.valueOf(String s) 和 Integer.parseInt(String s),它们都可以将字符串转换为整型,但它们之间有着很大的...

    java中int_char_string三种类型的相互转换

    Integer integer = Integer.valueOf(str); 三、将 int 转换成 String 将 int 转换成 String 可以使用以下三种方法: 1. 使用 String.valueOf() 方法 String s = String.valueOf(i); 2. 使用 Integer.toString()...

    进制之间的互相转换

    十进制与八进制与十六进制之间的转换可以使用 Integer.toOctalString() 方法、Integer.toHexString() 方法和 Integer.valueOf() 方法。例如: ```java int dec = 150; String octal = Integer.toOctalString(dec);//...

    Integer类的使用方法

    - **valueOf方法**:`valueOf`方法可以将字符串或特定进制的字符串转换为`Integer`对象。 ```java Integer i = Integer.valueOf("1234"); // 或者 Integer.valueOf("1234", 8); 如果字符串是八进制表示 ``` 总之...

    Java 基础.pdf_电子版pdf版

    Integer z = Integer.valueOf(123); Integer k = Integer.valueOf(123); System.out.println(z == k); // 输出 true,因为使用了缓存 ``` 5. Integer的valueOf方法实现 valueOf方法首先检查给定的数值是否在缓存池...

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

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

    Java实训教程 Java软件开发实战 Java类库 第3章 包装器类等 共40页.pptx

    Integer iVal = Integer.valueOf(100); Long lVal = Long.valueOf(100L); Boolean bVal = Boolean.valueOf(false); ``` ##### 四、特定包装器类 - **`Boolean`类**: - 用于处理需要将`boolean`原始类型转换为...

    将 BigDecimal 类型转换为 Integer 类型.pdf

    当 BigDecimal 的值超过 Integer 的最大值 `Integer.MAX_VALUE`(即 `2^31 - 1`),调用 `intValue()` 方法时,会抛出 `java.lang.ArithmeticException`,提示“Out of range”。例如: ```java BigDecimal ...

    java数据类型转换

    可以通过`Integer.valueOf()`或`Integer.parseInt()`方法实现: ```java String str = "25"; int i = Integer.valueOf(str).intValue(); // 使用valueOf // 或者 int i = Integer.parseInt(str); // 使用parseInt `...

    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)`,缓存行为未定义,因此比较结果不确定。...

    java中String类型转换方法.pdf

    * 使用 `Integer.valueOf()` 方法:`String str = "25"; int i = Integer.valueOf(str).intValue();` 字符串到浮点型 将字符串转换为浮点型可以使用以下方法: * 使用 `Double.parseDouble()` 方法:`String str ...

    java 类型转换 大全

    Integer integer = Integer.valueOf(intStr); return integer.intValue(); } // 将整数类型转换为字符串类型 public static String intToString(int value) { Integer integer = new Integer(value); return...

    JAVA数据类型转换

    例如,`stringToInt`方法使用`Integer.valueOf()`将字符串转换为`Integer`对象,然后通过`intValue()`得到`int`值。其他方法如`stringToFloat`和`floatToString`遵循相同的概念。 总的来说,理解并正确使用Java中的...

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

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

    Integer创建对象

    实际上,Java编译器会自动执行`Integer.valueOf(40)`方法,这是由于Java的自动装箱机制。`Integer.valueOf()`方法的目的是优化性能,因为它利用了对象池机制。对象池在`Integer`类中以内部类`IntegerCache`的形式...

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

    在Java中,我们可以直接声明Integer i = 10,这将自动装箱变为Integer i = Integer.valueOf(10);同时Integer i 也可以自动拆箱为 i.intValue()。 知识点2:Integer.valueOf()方法 Integer.valueOf()方法会将int...

    java类型转换参考大全

    - **使用`Integer.valueOf().intValue()`**:将字符串转换为整型。 ```java String str = "25"; int i = Integer.valueOf(str).intValue(); ``` - **使用`Integer.parseInt()`**:将字符串转换为整型。 ```java...

    java对象转换String类型的三种方法共1页.pdf

    但基础的转换方法主要是`toString()`、`String.valueOf()`和`StringBuilder/StringBuffer`。 在实际开发中,选择哪种方法取决于具体的需求。如果只是简单地转换单个对象,`toString()`或`String.valueOf()`通常足够...

Global site tag (gtag.js) - Google Analytics