`
ttwang
  • 浏览: 334749 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

Java new Integer 与 Integer.valueOf() 区别

    博客分类:
  • Java
阅读更多
看看这两个语句
Integer a=new Integer(1)
Integer a=Integer.valueOf(1);
两个都是得到一个Integer对象,但是Integer.valueOf的效率高。
为什么呢?因为Integer.valueOf用到了缓存。
看看Integer.valueOf的代码:
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是什么?看看源码
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返回的是同一个对象。看看下面代码:
  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。
【From Javaeye.com】
分享到:
评论

相关推荐

    Java Integer.ValueOf()的一些了解

    Java Integer.ValueOf()的一些了解 在Java中,Integer.ValueOf()方法是一个非常重要的方法,它可以将整数类型的值转换为Integer对象。下面我们就来详细了解一下这个方法的实现原理和使用方式。 首先,让我们来看...

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

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

    java中String类型转换方法.pdf

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

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

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

    第Java标准类库yrlong优秀文档.ppt

    Integer i = Integer.valueOf("300"); Long l = Long.valueOf("400"); System.out.println(b + " " + s + " " + i + " " + l); ``` 7.2 System类 System类提供了与系统环境相关的功能,如获取系统属性、控制输入...

    Java 基础.pdf_电子版pdf版

    Integer k = Integer.valueOf(123); System.out.println(z == k); // 输出 true,因为使用了缓存 ``` 5. Integer的valueOf方法实现 valueOf方法首先检查给定的数值是否在缓存池范围内,如果在则直接返回缓存的对象...

    java.lang.NumberFormatException For inputstring 4294967295处理方法

    在Java中,`Integer.parseInt()` 和 `Integer.valueOf()` 方法默认将字符串转换为32位有符号整数。这意味着它们能够处理的范围是 `-2^31` 到 `2^31 - 1`,即 `-2147483648` 到 `2147483647`。因此,当试图将 `'...

    Java中Integer两种转int方法比较

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

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

    Integer i = Integer.valueOf("100"); Long l = Long.valueOf("100"); Boolean b = Boolean.valueOf("false"); Integer iVal = Integer.valueOf(100); Long lVal = Long.valueOf(100L); Boolean bVal = ...

    进制之间的互相转换

    十进制与八进制与十六进制之间的转换可以使用 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 类型转换 大全

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

    java类型转换参考大全

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

    编程语言javajava考试复习题本科.pdf

    8. **数值转换**:`Integer.parseInt("123")`将字符串转换为整数,`Integer.valueOf("123").intValue()`也是同样的效果。`Integer.parseInt("123")`和`Integer.valueOf("123").intValue()`返回的都是`a`,因为它们是...

    java包装类练习.doc

    在装箱阶段,Java 会自动调用 valueOf 方法,而在拆箱阶段,Java 会自动调用 xxxValue 方法。这样可以简化代码和提高性能。 4. Java 包装类型的自动装箱拆箱机制 Java 包装类型的自动装箱拆箱机制是指在(assign)...

    java数据类型转换

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

    JAVA编程高级-工具类.pdf

    Integer wInt = Integer.valueOf(sInt); ``` - **从包装类到基本数据类型** - 使用包装类提供的转换方法: ```java Integer wInt = new Integer(500); int pInt = wInt.intValue(); ``` - **从字符串到...

    Java中的自动装箱和拆箱是什么?它们有什么作用?(java面试题附答案).txt

    这一过程在后台由Java编译器完成,无需开发者显式调用`Integer.valueOf()`方法。 **自动拆箱**则是相反的过程,即把包装类对象转换为基本数据类型的过程。例如,将`Integer`对象转换为`int`类型。同样,这一过程也...

    JAVA数据转换类型

    2. 使用 `Integer.valueOf()` 方法:`int i = Integer.valueOf("123").intValue();` 这两种方法都可以将字符串转换为整数,但需要注意的是,如果字符串不能被转换为整数,那么将抛出 `NumberFormatException` 异常...

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

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

Global site tag (gtag.js) - Google Analytics