GaR*_*eTa 3 java memory-management object wrapper primitive-types
说我们有:
public method(Integer s) {
....
}
Run Code Online (Sandbox Code Playgroud)
Java承认该方法的调用:
method(7);
Run Code Online (Sandbox Code Playgroud)
要么
int i = 7;
method(i);
Run Code Online (Sandbox Code Playgroud)
这样做时,JVM是否会创建一个新的Integer?如果我使用相同的int多次调用该方法,我是否创建了几个整数,或者使用了包装对象的"缓存"版本?
谢谢.
这样做时,JVM是否会创建一个新的Integer?
不是你给出的例子,不是 - 因为它在[-128,127]范围内.如果你的例子是157,那么答案将是特定于实现的.
如果装箱的值p为真,假,字节或范围为\ u0000到\ u007f的字符,或者介于-128和127(含)之间的整数或短数,则让r 1和r 2为p的任意两次拳击转换的结果.始终是r 1 == r 2的情况.
理想情况下,装箱给定的原始值
p总是会产生相同的参考.实际上,使用现有的实现技术可能不可行.上述规则是一种务实的妥协.上面的最后一个条款要求将某些常见值装入无法区分的对象中.实现可以懒惰地或急切地缓存这些.对于其他值,此公式不允许对程序员的盒装值的身份进行任何假设.这将允许(但不要求)共享部分或全部这些引用.这确保了在大多数常见情况下,行为将是期望的行为,而不会造成过度的性能损失,尤其是在小型设备上.例如,较少内存限制的实现可以缓存所有char和short值,以及-32K到+ 32K范围内的int和long值.
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |