Java原语和包装器已升级+;拳击!JVM在这里做什么
我想买1Z0-815。我所做的代码是:Java原语和包装器已升级+;拳击!JVM在这里做什么,java,int,wrapper,primitive,Java,Int,Wrapper,Primitive,我想买1Z0-815。我所做的代码是: public class PromotedPlusBoxed { public static void main(String[] args) { /*AUTOMATIC PROMOTION*/ final byte byteValue = 10; final short shortValue = 10; final char charValue = 10;
public class PromotedPlusBoxed {
public static void main(String[] args) {
/*AUTOMATIC PROMOTION*/
final byte byteValue = 10;
final short shortValue = 10;
final char charValue = 10;
final int intValue = 10;
final long longValue = 10;
final float floatValue = 10;
final double doubleValue = 10;
/**/
final Byte byteWrapperValue = 10;/*WHAT PROCESS IS HERE? A HIDDEN = (byte)10;? a performing a single boxed process.*/
final Short shortWrapperValue = 10;/*WHAT PROCESS IS HERE? A HIDDEN = (short)10;? a performing a single boxed process.*/
final Character charWrapperValue = 10;/*WHAT PROCESS IS HERE? A HIDDEN = (char)10;? a performing a single boxed process.*/
final Integer intWrapperValue = 10;
final Long longWrapperValue = 10;/*CAN'T PERFORM TWO-PHASE PROCESS 1). PROMOTED + 2).BOXED*/
final Float floatWrapperValue = 10;/*CAN'T PERFORM TWO-PHASE PROCESS 1). PROMOTED + 2).BOXED*/
final Double doubleWrapperValue = 10;/*CAN'T PERFORM TWO-PHASE PROCESS 1). PROMOTED + 2).BOXED*/
}
}
我也理解原语部分,我明白我不能这样做
final Long longWrapperValue = 10;/*CAN'T PERFORM TWO-PHASE PROCESS 1). PROMOTED + 2).BOXED*/
final Float floatWrapperValue = 10;/*CAN'T PERFORM TWO-PHASE PROCESS 1). PROMOTED + 2).BOXED*/
final Double doubleWrapperValue = 10;/*CAN'T PERFORM TWO-PHASE PROCESS 1). PROMOTED + 2).BOXED*/
因为10是一个文本int,所以2进程需要首先升级为float、long和double,然后装箱到相应的包装器中
但这是在编译
final Byte byteWrapperValue = 10;/*WHAT PROCESS IS HERE? A HIDDEN = (byte)10;? a performing a single boxed process.*/
final Short shortWrapperValue = 10;/*WHAT PROCESS IS HERE? A HIDDEN = (short)10;? a performing a single boxed process.*/
final Character charWrapperValue = 10;/*WHAT PROCESS IS HERE? A HIDDEN = (char)10;? a performing a single boxed process.*/
这里的过程是什么?10被提升为字节,然后被装箱成字节,这是2进程吗?但是在这个过程中,长与字节、字符、短之间的区别是什么
总而言之:我想理解为什么文字int可以被装箱成字节、字符、短字符而不是长字符。答案在于字节码。如果我们想查看它,我们必须先编译它,所以将您的上一个示例更改为:
final Byte byteWrapperValue=10;
最终shortWrapperValue=10;
最终字符charWrapperValue=10;
最终整数intWrapperValue=10;
最终长包装纸值=10L;我想理解为什么一个文本int可以被装箱成字节、字符、短字符而不是长字符。仅此而已。相关:和
L0
BIPUSH 10
INVOKESTATIC java/lang/Byte.valueOf (B)Ljava/lang/Byte;
L1
BIPUSH 10
INVOKESTATIC java/lang/Short.valueOf (S)Ljava/lang/Short;
L2
BIPUSH 10
INVOKESTATIC java/lang/Character.valueOf (C)Ljava/lang/Character;
L3
BIPUSH 10
INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;
L4
LDC 10
INVOKESTATIC java/lang/Long.valueOf (J)Ljava/lang/Long;
L5
LDC 10.0
INVOKESTATIC java/lang/Float.valueOf (F)Ljava/lang/Float;
L6
LDC 10.0
INVOKESTATIC java/lang/Double.valueOf (D)Ljava/lang/Double;
L0
LDC 10 # load the value from the constant pool
L1
INVOKESTATIC java/lang/Long.valueOf (J)Ljava/lang/Long; # convert the value to the wrapper type with autoboxing