Assigning a value of one type to a variable of another type is known as Type Casting.
- Java’s Automatic Conversions
-
When one type of data is assigned to another type of variable, an automatic type conversion will take place if the following two conditions are met:
- The two types are compatible.
- The destination type is larger than the source type.
- When these two conditions are met, a widening conversion takes place. For example, the int type is always large enough to hold all valid byte values, so no explicit cast statement is required.
- char and boolean are not compatible with each other.
- Casting Incompatible Types
- Although the automatic type conversions are helpful, they will not fulfill all needs. For example, what if you want to assign an int value to a byte variable? This conversion will not be performed automatically, because a byte is smaller than an int. This kind of conversion is sometimes called a narrowing conversion, since you are explicitly making the value narrower so that it will fit into the target type.
- To create a conversion between two incompatible types, you must use a cast. A cast is simply an explicit type conversion. It has this general form:
(target-type) value
Example:
int a; byte b; // ... b = (byte) a;
The following program demonstrates some type conversions that require casts:
// Demonstrate casts. class Conversion { public static void main(String args[]) { byte b; int i = 257; double d = 323.142; System.out.println("\nConversion of int to byte."); b = (byte) i; System.out.println("i and b " + i + " " + b); System.out.println("\nConversion of double to int."); i = (int) d; System.out.println("d and i " + d + " " + i); System.out.println("\nConversion of double to byte."); b = (byte) d; System.out.println("d and b " + d + " " + b); } }
This program generates the following output:
Conversion of int to byte. i and b 257 1 Conversion of double to int. d and i 323.142 323 Conversion of double to byte. d and b 323.142 67
Automatic Type Promotion in Expressions
char à short à int à long à float à double à long double
- Example
byte a = 40; byte b = 50; byte c = 100; int d = a * b / c;
- Another example
byte b = 50; b = b * 2; // Error! Cannot assign an int to a byte!
- Solution
byte b = 50; b = (byte)(b * 2);// which yields the correct value of 100.