如果发生内存变异,Java中的解包裹问题
当我们将包装器对象展开为其各自的原语值(例如整数到整数)时,它是否会将一个新值存储到整数中,其中的值为4字节(4字节的大小),或者它是否会改变整数中的值并缩短其内存大小以转换为int?当您打开包装器对象时,会隐式调用一个方法,该方法返回对象所持有的基元类型。在如果发生内存变异,Java中的解包裹问题,java,Java,当我们将包装器对象展开为其各自的原语值(例如整数到整数)时,它是否会将一个新值存储到整数中,其中的值为4字节(4字节的大小),或者它是否会改变整数中的值并缩短其内存大小以转换为int?当您打开包装器对象时,会隐式调用一个方法,该方法返回对象所持有的基元类型。在Integer的情况下,调用的方法是。比如说。阅读更多信息。打开包装器对象时,会隐式调用一个方法,该方法返回对象所持有的原语类型。在Integer的情况下,调用的方法是。比如说。阅读更多信息。展开“整型对象将4字节int值从其内部复制到新的
Integer
的情况下,调用的方法是。比如说。阅读更多信息。打开包装器对象时,会隐式调用一个方法,该方法返回对象所持有的原语类型。在Integer
的情况下,调用的方法是。比如说。阅读更多信息。展开“整型对象将4字节int
值从其内部复制到新的内存位置
整型对象不会以任何方式更改。整型对象“展开”将4字节的int
值从其内部复制到新的内存位置
整数对象不会以任何方式更改。首先,我/我们假设您所说的“展开”是指 答案是,被解除绑定的对象不会发生“记忆突变”
Integer
解装箱为int
相当于调用Integer.intValue()
。Integer.intValue()
的javadoc没有提到突变
SomeType convertToSomeType() {
// Copy this.state variables to local variables
// Convert using local variables
return /* some value created from the local variables */
java.lang.Integer
源代码的检查表明,它的实现如下2所示:
那里没有突变
整数中的值从4字节减少到2字节实际上不会导致更小的堆节点
整数
或任何其他包装类的内存使用,那么应该在创建包装对象时进行优化(或者在允许的情况下对其进行变异)。。。拆开包装的时候不会
1-我惊讶地发现JLS或javadocs都没有明确说明这一点。然而,从他们所说的很清楚,标准的原语包装类必须是不可变的。例如,如果
Integer
值是可变的,则JLS中指定的Integer
缓存行为将是不健全的
善意的谎言。在Java的某些版本中,方法上有一个
@hospotintrisccandidate
注释。但是JIT编译器可能做的任何事情都会涉及到对Integer
对象的变异,这是难以置信的。首先,我/我们假设你说的“展开”是指
答案是,被解除绑定的对象不会发生“记忆突变”
Integer
解装箱为int
相当于调用Integer.intValue()
。Integer.intValue()
的javadoc没有提到突变
SomeType convertToSomeType() {
// Copy this.state variables to local variables
// Convert using local variables
return /* some value created from the local variables */
java.lang.Integer
源代码的检查表明,它的实现如下2所示:
那里没有突变
整数中的值从4字节减少到2字节实际上不会导致更小的堆节点
整数
或任何其他包装类的内存使用,那么应该在创建包装对象时进行优化(或者在允许的情况下对其进行变异)。。。拆开包装的时候不会
1-我惊讶地发现JLS或javadocs都没有明确说明这一点。然而,从他们所说的很清楚,标准的原语包装类必须是不可变的。例如,如果
Integer
值是可变的,则JLS中指定的Integer
缓存行为将是不健全的
善意的谎言。在Java的某些版本中,方法上有一个@hospotintrisccandidate
注释。但是JIT编译器可能做的任何事情都会涉及到对Integer
对象进行变异,这是难以置信的;int y=8;y=x编写此代码,然后使用javap
查看编译器的实际功能,它被称为“unbox”,而不是“unwrap”。2)对象不能按照您的想法转换为原语,Integer
不是“shorten”为int
。1)Integer x=12;int y=8;y=x
编写此代码,然后使用javap
查看编译器的真正功能,它被称为“unbox”,而不是“unwrap”。2)对象可以