使用Integer i = NumberUtils.INTEGER_ONE
代替Integer i = 1
是否有价值?我不知道自动拳击背后会发生什么。
由于
答案 0 :(得分:9)
基本上它将编译成:
Integer i = Integer.valueOf(NumberUtils.INTEGER_ONE);
假设INTEGER_ONE
被声明为int
。
在执行时,假设INTEGER_ONE的值为1,实际上每次都会返回对同一对象的引用,由Java语言规范保证,因为它在-128到127的范围内。范围之外的值可以返回对同一对象的引用,但不必返回。
答案 1 :(得分:0)
java中的许多包装器和实用程序类都有缓存池。当调用valueOf()方法时,Integer使用内部缓存的静态数组'Integer'引用。字符串也有类似的池。
但是,如果你执行类似Integer i = 128的操作,那么这将开始影响性能,因为自动装箱将为未缓存的整数启动(不是说它不会为缓存的整数启动)。与返回缓存整数的情况不同,此语句创建一个新对象。对象创建很昂贵并且会降低性能。
[编辑]
澄清答案