Type promotion helps Java automatically convert smaller data types to bigger ones so calculations work smoothly without errors.
Type promotion in Java
int result = byteValue + intValue;Java automatically converts smaller types like byte or short to int before arithmetic.
This avoids data loss and makes calculations safe.
byte b = 10; int i = 20; int sum = b + i;
short s = 5; char c = 'A'; int result = s + c;
float f = 3.5f; double d = 4.5; double total = f + d;
This program shows how Java promotes smaller types to bigger types automatically during arithmetic operations.
public class TypePromotionExample { public static void main(String[] args) { byte b = 10; short s = 20; char c = 'A'; // ASCII 65 int i = 30; float f = 40.5f; double d = 50.5; int result1 = b + s; // byte and short promoted to int int result2 = s + c; // short and char promoted to int double result3 = f + d; // float promoted to double System.out.println("Result1 (byte + short): " + result1); System.out.println("Result2 (short + char): " + result2); System.out.println("Result3 (float + double): " + result3); } }
Type promotion happens automatically in expressions involving byte, short, and char.
When mixing float and double, float is promoted to double.
Be careful: promotion can sometimes cause unexpected results if you assume types stay the same.
Java automatically converts smaller types to bigger types in expressions to avoid errors.
byte, short, and char are promoted to int before arithmetic.
float is promoted to double when mixed in expressions.
Practice
Solution
Step 1: Understand type promotion basics
Java promotes smaller integer types (byte, short, char) to int before arithmetic to avoid data loss.Step 2: Evaluate each option
byte, short, and char are promoted to int before arithmetic operations. correctly states this rule. Options A, B, and C are incorrect because long is not promoted to byte, int is not promoted to byte, and double is not promoted to float.Final Answer:
byte, short, and char are promoted to int before arithmetic operations. -> Option BQuick Check:
byte/short/char -> int promotion = D [OK]
- Thinking int is promoted to byte
- Confusing float and double promotion
- Assuming long is promoted to smaller types
Solution
Step 1: Analyze type promotion in arithmetic
In expressions, byte and short are promoted to int, so 10 + 20 is int.Step 2: Check each assignment
int result = (byte)10 + (short)20; casts explicitly, so compiles but casting is manual. byte b = 10 + 20; tries to assign int result to byte without cast - error. int sum = 10 + 20; assigns int sum correctly. short s = 10 + 20; tries to assign int to short without cast - error.Final Answer:
int sum = 10 + 20; -> Option DQuick Check:
byte/short -> int, assign to int = B [OK]
- Assigning int expression to byte or short without cast
- Forgetting byte/short promote to int
- Assuming automatic narrowing conversion
byte b = 10; short s = 20; char c = 30; int result = b + s + c; System.out.println(result);
Solution
Step 1: Understand type promotion in expression
byte, short, and char are promoted to int before addition, so b + s + c is int.Step 2: Calculate the sum
10 + 20 + 30 = 60, assigned to int variable result, then printed.Final Answer:
60 -> Option CQuick Check:
byte+short+char -> int sum = 60 [OK]
- Expecting byte or short result type
- Confusing output with float/double
- Thinking code causes error
byte b = 5; byte c = 10; byte sum = b + c; System.out.println(sum);
Solution
Step 1: Understand type promotion in addition
byte variables b and c are promoted to int during addition, so b + c is int.Step 2: Fix assignment error
Assigning int result to byte sum causes error. Adding explicit cast (byte)(b + c) fixes it.Final Answer:
Add explicit cast: byte sum = (byte)(b + c); -> Option AQuick Check:
byte+byte -> int, cast needed for byte = A [OK]
- Ignoring need for cast when assigning to byte
- Assuming automatic narrowing conversion
- Changing variable types unnecessarily
float f = 5.5f; double d = 10.5; var result = f + d; System.out.println(((Object)result).getClass().getSimpleName());
What will be printed and why?
Solution
Step 1: Understand promotion between float and double
In expressions mixing float and double, float is promoted to double.Step 2: Determine result type and output
Variable result is inferred as double by var. Printing class name outputs "Double".Final Answer:
double because float is promoted to double in mixed expressions -> Option AQuick Check:
float + double -> double result = A [OK]
- Assuming var infers float
- Thinking float is bigger than double
- Expecting compilation error with var
Ready to prove it?
Pass the test and this pattern moves unknown
