I'm trying to go for 1Z0-815. This code I was making:
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*/
}
}
I understand the primitives part also, and I understand that I cannot do this.
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*/
Because 10 is a literal int a 2 process needs to made first promoted to float,long and double and later boxed to the respective wrappers.
But this is compiling.
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.*/
What is the process here? 10 is getting promoted to byte and later boxed into a Byte is that a 2 process right? but is not working for a Long what is the diff between Long and Byte,Character,Short in this process.
In summary: I want to understand why can a literal int can be boxed into a Byte,Character,Short and not into a Long.