C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Often its type is considered part of the data: it is metadata, information about itself. Casting, in converting types, thus changes data.
Casting and converting in Java is a practical operation. We use implicit (hidden) and explicit (specified) casts. Complex conversions too are needed.
Object and String. This program casts a String variable to its ancestor class Object (all classes derive from Object). It then casts the object back to a String.
Implicit: An implicit cast uses no special expression syntax. Rather it converts one type to another—the compiler decides on its own.
Explicit: This is specified directly in the syntax. The Object is explicitly cast to a String in the third statement.
Based on: Java 8 Java program that uses String, Object cast public class Program { public static void main(String[] args) { String value = "cat"; Object temp = value; // Implicitly cast to Object. String value2 = (String) temp; // Cast to String. System.out.println(value2); } } Output cat
Numeric. Numbers can be cast with the same syntax as classes. For casting to a larger byte size number (a "widening" cast) no cast is required.
But: For "narrowing" casts, where a larger byte size number is reduced to fit in a smaller type, a cast is required.
Data loss: This may occur in a narrowing conversion. Be sure the value can be represented in the new data size.
Java program that uses numeric casts public class Program { public static void main(String[] args) { int size = 5; double size2 = size; // No cast needed. byte size3 = (byte) size; // A larger type must be cast down. System.out.println(size); System.out.println(size2); System.out.println(size3); } } Output 5 5.0 5
Invalid cast, ClassCastException. Some casts will fail. And often the compiler will detect an invalid cast at compile-time, saving us the trouble of running an invalid program.
Here: The Object cannot be cast to String, because it is of type StringBuilder. A ClassCastException occurs.
Java program that uses invalid cast public class Program { public static void main(String[] args) { StringBuilder builder = new StringBuilder(); builder.append("cat"); Object temp = builder; // This is fine. String value = (String) temp; // This causes an error. System.out.println(value); } } Output Exception in thread "main" java.lang.ClassCastException: java.lang.StringBuilder cannot be cast to java.lang.String at program.Program.main(Program.java:10)
Array covariance. This concept means an array of a derived class can be cast to an ancestor class array. So an array of Strings can be cast to an array of Objects.
Tip: Array covariance is most often useful when we want to pass an array of any type as an Object array to a commonly-used method.
And: In most programs, array covariance is not important. Using exact types is clearer and faster.
Java program that uses Object array public class Program { public static void main(String[] args) { String[] values = { "cat", "dog", "rabbit" }; // A String array is also an Object array. Object[] array = values; // Loop over objects and print String lengths. for (Object v : array) { System.out.println(((String) v).length()); } } } Output 3 3 6
Casts versus conversions. Typically casts describe special syntax instructions to convert types. Conversions meanwhile include more complex operations, like converting a String to an array.
Number to String. A number cannot be cast to a String—instead we must convert it with a method like Integer.toString. This method returns a String version of the int argument.
Java program that converts number to String public class Program { public static void main(String[] args) { int number = 100; String result = Integer.toString(number); // Number to String. System.out.println(result); } } Output 100
String to number. We convert a String to an integer by parsing it. The Integer.parseInt method can do this. It receives a String argument and returns an int.
Java program that converts String to number public class Program { public static void main(String[] args) { String value = "100"; int result = Integer.parseInt(value); // String to number. System.out.println(result); } } Output 100
Boolean to int. Sometimes we want to convert a boolean into an int. Typically we want true to equal 1, and false to be 0. This is done with a simple method and a ternary expression.
Casting is complex. It is often language-specific, so we must memorize its syntax. Conversions require more steps. They are often reused in many projects and stored in utility classes.