ביצוע casting ל-type משמעותו שינוי ה-type ל-type אחר. קיימים מקרים שבהם יש צורך ב-casting. מקרים אלה נחלקים לשתי קבוצות. קיימת הקבוצה הראשונה של מקרים שבהם יש צורך ב-casting וה-casting מתבצע באופן אוטומאטי, וקיימת הקבוצה השניה של מקרים שבהם יש צורך ב-casting וה-casting לא מתבצע באופן אוטומאטי. במקרים ששייכים לקבוצה השניה, אם לא נוסיף את הקוד הדרוש כדי לבצע את ה-casting אז הקוד לא יעבור קומפילציה.
ביצוע casting לערך מטיפוס אשר נחשב ל-Primitive Type
כדי לבצע casting לערך מטיפוס אשר נחשב ל-Primitive Type (כגון int, float, double וכו׳) יש לציין את ה-type שאליו מבצעים את ה-casting בתוך סוגריים עגולות, ולמקם את מה שכתבנו משמאל לערך.
double d = 3;
int i = (int)d;
במקרים שבהם ה-casting לא עלול לגרום לאיבוד ערך (במילים אחרות: ה-casting בטוח) הוא יתבצע באופן אוטומאטי. בדוגמת הקוד האחרונה ה-casting איננו בטוח, ולכן ללא ביצוע ה-casting בשורה השניה הקוד לא יעבור קומפילציה. בדוגמת הקוד הבאה ה-casting בטוח (אין סכנה לאיבוד ערך מבחינת הקומפיילר) ולכן ה-casting יתבצע באופן אוטומאטי (אין צורך לבצע casting בעצמנו).
int i = 5;
double d = i;
ביצוע casting ל-type של reference לאובייקט
לכל אובייקט יש type. זהו ה-class שממנו הוא נוצר. ל-reference של האובייקט גם יש type. כאשר יוצרים אובייקט חדש באמצעות new מקבלים reference לאובייקט החדש, וה-type של אותו reference זהה ל-type של האובייקט שיצרנו. את ה-type של האובייקט לא ניתן לשנות. אפשר לדמיין שה-type של האובייקט צרוב ב-DNA שלו, ושלא ניתן לשנותו. את ה-type של ה-reference ניתן לשנות (ניתן לעשות לו casting). ה-syntax לביצוע ה-casting זהה ל-syntax לביצוע casting לערך מטיפוס אשר נחשב ל-primitive type.
class A {}
class B extends A {}
class C extends B {}
C c = new C();
A a = c;
B b = (B)a;
ביצוע casting ל-type של reference לאובייקט יכול להתאפשר רק אם מדובר ב-casting ל-type שיורש (ישירות או בעקיפין) מה-type של ה-reference או ל-type שמוריש (ישירות או בעקיפין) ל-type של ה-reference. כאשר יש צורך ב-casting ל-type שמוריש (ישירות או בעקיפין) ל-type של ה-reference אז ה-casting יתבצע באופן אוטומאטי. בדוגמת הקוד האחרונה, בשורה מספר 6 מתבצע casting באופן אוטומאטי ל-type של ה-reference אשר מוחזק במשתנה c מ-C ל-A (ה-type ששמו A מוריש בעקיפין ל-type ששמו C). בשורה מספר 7 יש צורך ב-casting וכיוון שלא מדובר ב-casting ל-type שמוריש ל-type ששמו A (ה-type ששמו B יורש מ-A) אז הוא לא מתבצע באופן אוטומאטי ועל כן עלינו לעשות אותו.