本文转自http://honda418.iteye.com/blog/315893,谢谢该文的作者。
先看代码:
public static void main(String[] args){
Integer a = 100;
Integer b = 100;
System.out.println(a == b);
}
结果:true
public static void main(String[] args){
Integer a = new Integer(100);
Integer b = new Integer(100);
System.out.println(a == b);
}
结果:false
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保存起来,这正好是一个字节。
分享到:
相关推荐
public static Integer valueOf(int i) { final int offset = 128; if (i >= -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都是常用的方法,但是它们之间存在着很多的区别,下面我们将通过代码来解释它们之间...
首先,Integer.parseInt(String s) 将会返回 int 常量,而 Integer.valueOf(String s) 将会返回 Integer 类型。如果存在缓存,将会返回缓存中已有的对象。 在使用这两个方法时,需要注意自动拆箱和装箱机制的影响。...
当调用`valueOf(int i)`方法时,会首先检查给定的`int`值是否在缓存范围内,如果在则直接返回缓存中的对象,否则创建新的`Integer`对象。 总的来说,理解`Integer.valueOf()`的工作原理和`Integer`对象的缓存机制,...
Java 中的 String 和 int 类型的相互转换是一个基本的数据类型转换操作,我们可以使用多种方法来实现这种转换,例如使用 `Integer.parseInt()` 方法、`Integer.valueOf()` 方法、`String.valueOf()` 方法等。...
使用Java的`Integer.parseInt()`或`Integer.valueOf()`方法时,可以捕获`NumberFormatException`异常,并给出友好提示。 3. **数据绑定的类型转换**:在Spring MVC中,你可以自定义类型转换器。通过实现`org.spring...
int i = Integer.valueOf(my_str).intValue(); 2. 使用 Integer.parseInt() 方法 使用 Integer.parseInt() 方法也可以将 String 转换成 int。例如: int i = Integer.parseInt(str); 二、将 String 转换成 ...
对于从十六进制、八进制或二进制转换回十进制,我们可以使用`Integer.valueOf(String s, int radix)`方法。 - **十六进制转十进制**: - 示例:`Integer.valueOf("FFFF", 16).toString()` 返回 `"65535"` (十六进制...
在Java编程语言中,将`Integer`对象转换为基本数据类型`int`有两种常见的方法:`Integer.parseInt()`和`Integer.valueOf()`。理解这两种方法的区别和应用场景对于编写高效且正确的Java代码至关重要。 首先,我们来...
- **十六进制转十进制**:可以使用`Integer.valueOf(String s, int radix)`方法,其中`s`是十六进制字符串,`radix`是基数(这里是16)。例如: ```java String hexValue = "FFFF"; int decValue = Integer....
可以通过`Integer.valueOf(String s, int radix)`方法来实现,其中`s`是十六进制字符串,`radix`是基数(这里是16)。例如: ```java String hex = "FFFF"; int decimal = Integer.valueOf(hex, 16); // ...
int i = Integer.valueOf(str).intValue();` 字符串到浮点型 将字符串转换为浮点型可以使用以下方法: * 使用 `Double.parseDouble()` 方法:`String str = "3.14"; double d = Double.parseDouble(str);` * ...
标题提到的"Java String转int还有其它几种写法",描述中提到了两种常见方法:`Integer.valueOf()`和`Integer.parseInt()`。以下是这些方法的详细解释: 1. **`Integer.valueOf()`方法**: `Integer.valueOf()`是...
在Java中,`Integer.parseInt()` 和 `Integer.valueOf()` 方法默认将字符串转换为32位有符号整数。这意味着它们能够处理的范围是 `-2^31` 到 `2^31 - 1`,即 `-2147483648` 到 `2147483647`。因此,当试图将 `'...
在Java中,`Integer.valueOf(int)`方法用于将一个int类型的值转换为对应的`Integer`对象。这个方法对于自动装箱和拆箱操作非常关键,是Java集合框架和泛型使用的基石。例如,当我们尝试将一个int变量添加到只能存储...
要将二进制、八进制或十六进制的字符串转换为十进制的整数,可以使用`Integer.valueOf(String s, int radix)`方法,其中`radix`参数指定了输入字符串的基数。例如: - `Integer.valueOf("FFFF", 16).toString()`会...