Java > Core Java > Variables and Data Types > Type Casting and Conversion
Explicit Type Casting (Narrowing Conversion) Example
This code snippet demonstrates explicit type casting, also known as narrowing conversion, in Java. It shows how to convert a larger data type (e.g., double
) to a smaller data type (e.g., int
). Note that this can result in data loss.
Code Example: Explicit Type Casting
This Java code snippet shows how to perform explicit type casting from a double
to an int
. The (int)
operator tells the compiler to convert the double
value to an int
. Since int
is smaller than double
, data (the fractional part) is lost. The variable largeNumber
holds the value 123.456. After casting, smallNumber
holds only 123.
public class ExplicitCasting {
public static void main(String[] args) {
double largeNumber = 123.456;
int smallNumber = (int) largeNumber; // Explicit type casting
System.out.println("Original double value: " + largeNumber);
System.out.println("Casted int value: " + smallNumber);
}
}
Concepts Behind the Snippet
Explicit type casting (narrowing conversion) is used when you need to convert a value from a data type with a larger range to a data type with a smaller range. Because information loss is possible, the programmer must explicitly acknowledge the conversion by using the cast operator (e.g., (int)
, (byte)
, (short)
, (char)
). This signals to the compiler that the possible loss of data is intentional and understood.
Real-Life Use Case
Imagine calculating the average of student scores (resulting in a double
) but needing to store the number of passing students as an integer. You might cast the double
average (if it represents number of passed students) to an int
to use it as an array index or in other integer-based calculations. Another use case involves working with sensor data that has been scaled or adjusted to a certain range, and you need to convert it back to its original integer representation for processing or storage.
Best Practices
1. Be Aware of Data Loss: Always understand that explicit type casting can lead to loss of precision or data. Consider the range of the target data type and ensure the value being cast fits within that range to minimize unexpected results. 2. Use with Caution: Only use explicit type casting when absolutely necessary. Consider alternative approaches, such as rounding, to minimize data loss in some cases. 3. Document your Casts: When you use explicit type casting, add comments to explain why you are doing so and what potential data loss you expect. This helps other developers understand the code and prevents errors later.
When to use them
Use explicit type casting when you need to convert a value from a data type with a larger range to a data type with a smaller range, and you are aware of the potential for data loss and accept it. Also useful when interacting with libraries or APIs that require specific data types, even if data loss might occur.
Memory Footprint
The memory footprint changes because the data is being stored in a different data type. A double
typically occupies 8 bytes of memory, while an int
typically occupies 4 bytes. So, after the cast, the smallNumber
variable will use less memory than the original largeNumber
variable. However, the overall memory usage of the program may not significantly change unless numerous such conversions are performed.
Cons
The primary con of explicit type casting is the potential for data loss. When casting a larger data type to a smaller one, information can be truncated or lost. This can lead to unexpected behavior and incorrect results in your program. It also decreases precision if you are working with floating-point numbers.
FAQ
-
What happens if the
double
value is very large, such as 2147483648.0, when casting to anint
?
If thedouble
value is larger than the maximum value that anint
can hold (2147483647), theint
will be assigned the maximum possible value, or the minimum possible value for negative numbers. There is no exception thrown, but the value will be incorrect. -
Can I use explicit type casting to convert a
String
to anint
?
No, explicit type casting cannot directly convert aString
to anint
. You must use theInteger.parseInt()
orInteger.valueOf()
methods for that conversion. Explicit type casting is only for compatible numeric types.