`
zhangcong170
  • 浏览: 70972 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Java的Integer.valueOf(int i)

阅读更多

      本文转自http://honda418.iteye.com/blog/315893,谢谢该文的作者。 

先看代码:

Java代码 复制代码
public static void main(String[] args){
  Integer a = 100;
  Integer b = 100;
  System.out.println(a == b);
}
结果:true

Java代码 复制代码
public static void main(String[] args){
         Integer a = new Integer(100);
         Integer b = new Integer(100);
         System.out.println(a == b);
}


结果:false

Java代码 复制代码
public static void main(String[] args){
           Integer a = 200;
  Integer b = 200;
  System.out.println(a == b);
}


结果:false

注意:以上在jdk1.5以上可以通过。

第二个很容易理解。
为啥第一个返回true呢?而第三个又返回false?
继续修改,发现在127跟128是个分界线
当-128 <= ab <= 127时候,返回true
此外,返回false

通过反编译得知,
Integer a = 200;
变成了
Integer a = Integer.valueOf(200);

再看看java.lang.Integer中关于valueOf的源代码是怎样的:
  public static Integer valueOf(int i) {
    final int offset = 128;
    if (i >= -128 && i <= 127) {
      return IntegerCache.cache[i + offset];
    }
    return new Integer(i);
  }
结论:
当这个值在-128和127之间时,会用缓存保存起来,供多次使用,以节约内存。
如果不在这个范围内,则创建一个新的Integer对象。

这个问题的本质是Integer的valueOf()方法。

 

 

注意:以下为个人补充

      查看原代码可知,当int值在-128和127之间时,java会用IntegerCach保存起来,这正好是一个字节。

分享到:
评论

相关推荐

    Java Integer.ValueOf()的一些了解

    public static Integer valueOf(int i) { final int offset = 128; if (i &gt;= -128 && i ) { // must cache return IntegerCache.cache[i + offset]; } return new Integer(i); } ``` 从源码中我们可以看到,...

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

    Java中Integer.valueOf、parsetInt() String.valueOf的区别和结果代码解析 Java中Integer.valueOf、parsetInt()和String.valueOf都是常用的方法,但是它们之间存在着很多的区别,下面我们将通过代码来解释它们之间...

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

    首先,Integer.parseInt(String s) 将会返回 int 常量,而 Integer.valueOf(String s) 将会返回 Integer 类型。如果存在缓存,将会返回缓存中已有的对象。 在使用这两个方法时,需要注意自动拆箱和装箱机制的影响。...

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

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

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

    Java 中的 String 和 int 类型的相互转换是一个基本的数据类型转换操作,我们可以使用多种方法来实现这种转换,例如使用 `Integer.parseInt()` 方法、`Integer.valueOf()` 方法、`String.valueOf()` 方法等。...

    Springmvc : Failed to convert property value of type 'java.lang.String' to int

    使用Java的`Integer.parseInt()`或`Integer.valueOf()`方法时,可以捕获`NumberFormatException`异常,并给出友好提示。 3. **数据绑定的类型转换**:在Spring MVC中,你可以自定义类型转换器。通过实现`org.spring...

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

    int i = Integer.valueOf(my_str).intValue(); 2. 使用 Integer.parseInt() 方法 使用 Integer.parseInt() 方法也可以将 String 转换成 int。例如: int i = Integer.parseInt(str); 二、将 String 转换成 ...

    JAVA实用进制转换

    对于从十六进制、八进制或二进制转换回十进制,我们可以使用`Integer.valueOf(String s, int radix)`方法。 - **十六进制转十进制**: - 示例:`Integer.valueOf("FFFF", 16).toString()` 返回 `"65535"` (十六进制...

    Java中Integer两种转int方法比较

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

    JAVA实用进制转换.pdf

    - **十六进制转十进制**:可以使用`Integer.valueOf(String s, int radix)`方法,其中`s`是十六进制字符串,`radix`是基数(这里是16)。例如: ```java String hexValue = "FFFF"; int decValue = Integer....

    JAVA 进制转换全攻略.docx

    可以通过`Integer.valueOf(String s, int radix)`方法来实现,其中`s`是十六进制字符串,`radix`是基数(这里是16)。例如: ```java String hex = "FFFF"; int decimal = Integer.valueOf(hex, 16); // ...

    java中String类型转换方法.pdf

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

    Java String转int还有其它几种写法.docx

    标题提到的"Java String转int还有其它几种写法",描述中提到了两种常见方法:`Integer.valueOf()`和`Integer.parseInt()`。以下是这些方法的详细解释: 1. **`Integer.valueOf()`方法**: `Integer.valueOf()`是...

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

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

    Valueof_JAVA源码_java_

    在Java中,`Integer.valueOf(int)`方法用于将一个int类型的值转换为对应的`Integer`对象。这个方法对于自动装箱和拆箱操作非常关键,是Java集合框架和泛型使用的基石。例如,当我们尝试将一个int变量添加到只能存储...

    java进制转换大全

    要将二进制、八进制或十六进制的字符串转换为十进制的整数,可以使用`Integer.valueOf(String s, int radix)`方法,其中`radix`参数指定了输入字符串的基数。例如: - `Integer.valueOf("FFFF", 16).toString()`会...

Global site tag (gtag.js) - Google Analytics