我看过这篇文章:Is int an object in Java?。如果int不继承Object,那么为什么“String.format(String,Object ...)”用int的编译?
在帖子中,有人认为int
不是从Object
继承。如果是这样的话,那么为什么下面的代码没有任何错误编译?鉴于int
不是Object
和format()
方法的签名是public static String format(String format, Object... args)
如文档所示:javadoc for String!
public class Testing {
public static void main(String[] args) {
int integer = 7;
String str = String.format("%03d", integer);
System.out.println(str);
}
}
我也读过关于“自动装箱”的内容。这究竟意味着什么?在编译之前所有的原语是否被合适的Object
所取代?如果是这样,那么在Integer
的(Integer[]
)上使用大量的int
(int[]
)时,是否有任何内存使用优势?类似的论点遵循双等。
任何见解是值得欢迎的。
感谢您的回答,并感谢您澄清我对数组的怀疑。我从你的和其他答案中得出的结论是,自动装箱是在需要时在本地完成的,因此int []将比Integer []需要更少的空间。你能否详细说明最后的声明。你的意思是,如果Integer中包含的值介于-128和127之间,则不使用引用? – 2014-10-04 09:39:56
在实例化-128和127之间的Integer时,如果该值已存在于池中,则JVM将首先在整数池中查找。如果有,则返回包含此值的现有Integer的引用,否则将创建一个新的Integer,将其添加到池中并返回。它使我们能够减少Integer引用的数量,因为大部分时间我们使用低整数值而不是高值。 – Dici 2014-10-04 12:09:59
你可以阅读这个问题的3个第一个答案的一部分,以更好的方式解释它:http://stackoverflow.com/questions/13098143/java-integer-constant-pool – Dici 2014-10-04 12:14:06