Java Tutorials - Herong's Tutorial Examples - v8.22, by Herong Yang
Type Casting Compile and Runtime Error
This section provides a tutorial example on compilation time casting error and runtime casting exception.
If you are trying to convert reference type to another type that is not compatible, you will get a compiler error. Here is a simple example:
/* TypeCastingCompileError.java
* Copyright (c) HerongYang.com. All Rights Reserved.
*/
import java.util.*;
class TypeCastingCompileError {
public static void main(String[] a) {
// Compiler error: Casting from Integer to Long is not allowed
Integer myInteger = new Integer(777);
Long myLong = (Long) myInteger;
}
}
Try to compile it. You will see a compilation error:
TypeCastingCompileError.java:10: error: incompatible types: Integer
cannot be converted to Long
Long myLong = (Long) myInteger;
^
Note: TypeCastingCompileError.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
1 error
If you want, you can avoid the compiler error by casting Integer to Object, before casting it to Long. But you will get a runtime error. Here is a simple example:
/* TypeCastingRuntimeError.java
* Copyright (c) HerongYang.com. All Rights Reserved.
*/
class TypeCastingRuntimeError {
public static void main(String[] a) {
try {
// Runtime error: Casting from Integer to Long is not allowed
Integer myInteger = Integer.valueOf(777);
Object myObject = (Object) myInteger;
Long myLong = (Long) myObject;
} catch (Exception e) {
e.printStackTrace();
}
try {
// Runtime error: Casting from Integer to Long is not allowed
Integer hisInteger = Integer.valueOf(888);
Number hisNumber = (Number) hisInteger;
Long hisLong = (Long) hisNumber;
} catch (Exception e) {
e.printStackTrace();
}
}
}
Try to compile and run it with JDK 13:
java.lang.ClassCastException: java.base/java.lang.Integer cannot be cast
to java.base/java.lang.Long
at TypeCastingRuntimeError.main(TypeCastingRuntimeError.java:11)
java.lang.ClassCastException: java.base/java.lang.Integer cannot be cast
to java.base/java.lang.Long
at TypeCastingRuntimeError.main(TypeCastingRuntimeError.java:20)
Try to compile and run it with JDK 8:
java.lang.ClassCastException:
java.lang.Integer cannot be cast to java.lang.Long
at TypeCastingRuntimeError.main(TypeCastingRuntimeError.java:11)
java.lang.ClassCastException:
java.lang.Integer cannot be cast to java.lang.Long
at TypeCastingRuntimeError.main(TypeCastingRuntimeError.java:20)
As you can see from this example, the compiler fails to detect the type casting error, because down casting "(Long) Object" or "(Long) Number" is a valid casting if the reference object is a Long object.
Table of Contents
Execution Process, Entry Point, Input and Output
Primitive Data Types and Literals
Bits, Bytes, Bitwise and Shift Operations
Managing Bit Strings in Byte Arrays
►Reference Data Types and Variables
Reference Types Supported in Java
Class Type Variables Storing References
Explicit and Implicit Type Casting
►Type Casting Compile and Runtime Error
StringBuffer - The String Buffer Class
System Properties and Runtime Object Methods
Generic Classes and Parameterized Types
Generic Methods and Type Inference
Lambda Expressions and Method References
Java Modules - Java Package Aggregation
Execution Threads and Multi-Threading Java Programs
ThreadGroup Class and "system" ThreadGroup Tree
Synchronization Technique and Synchronized Code Blocks
Deadlock Condition Example Programs
Garbage Collection and the gc() Method
Assert Statements and -ea" Option