当您执行 Integer i = 1;
时,Integer
类中的哪个方法将被使用?
我相信这不是构造函数,可能是 valueOf()
方法。
当您执行 Integer i = 1;
时,Integer
类中的哪个方法将被使用?
我相信这不是构造函数,可能是 valueOf()
方法。
Integer.valueOf(int)
、Boolean、Byte、Character、Long、Float和Double同样适用。
注意:对于Boolean和Byte,所有可能的值都被缓存。 对于Character,值0到127被缓存。 对于Short和Long值,-128到127被缓存。 对于Integer,默认情况下缓存-128到127,但是可以使用多个选项来增加最大值。
这可能会导致出现令人惊讶的行为。
System.out.println((Integer) (int) -128 == (Integer) (int) -128);
System.out.println((Integer) (int) -129 == (Integer) (int) -129);
打印
true
false
不确定为什么需要使用 (int) -128
来强制将 -128
转换为整型以使其在 Java 7 中编译通过。
new Boolean(flag)
;) - Peter Lawrey是的,这是valueOf:
以下是javap的输出:
public static void main(java.lang.String[]);
Code:
Stack=1, Locals=2, Args_size=1
0: iconst_1
1: invokestatic #16; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
4: astore_1
5: return
LineNumberTable:
line 5: 0
line 6: 5
实际上是valueOf()
。看一下可能的重复问题:编译器为自动装箱生成什么代码?。
对于范围在-128、127之间的整数,当使用valueOf
时,你永远不会看到构造函数被调用,因为Integer
已经缓存了这些实例。