Login Register
Code2night
  • Home
  • Blog Archive
  • Learn
    • Tutorials
    • Videos
  • Interview Q&A
  • Languages
    • Angular Angular js ASP.NET Asp.net Core ASP.NET Core, C# C C# C#, ASP.NET Core, Dapper
      C#, ASP.NET Core, Dapper, Entity Framework DotNet HTML/CSS Java JavaScript Node.js Python Python 3.11, Pandas, SQL
      Python 3.11, SQL Python 3.11, SQLAlchemy Python 3.11, SQLAlchemy, SQL Python 3.11, SQLite React Security SQL Server TypeScript
  • Post Blog
  • Tools
    • Beautifiers
      JSON Beautifier HTML Beautifier XML Beautifier CSS Beautifier JS Beautifier SQL Formatter
      Dev Utilities
      JWT Decoder Regex Tester Diff Checker Cron Explainer String Escape Hash Generator Password Generator
      Converters
      Base64 Encode/Decode URL Encoder/Decoder JSON to CSV CSV to JSON JSON to TypeScript Markdown to HTML Number Base Converter Timestamp Converter Case Converter
      Generators
      UUID / GUID Generator Lorem Ipsum QR Code Generator Meta Tag Generator
      Image Tools
      Image Converter Image Resizer Image Compressor Image to Base64 PNG to ICO Background Remover Color Picker
      Text & Content
      Word Counter PDF Editor
      SEO & Web
      SEO Analyzer URL Checker World Clock
  1. Home
  2. Blog
  3. Java
  4. Master Java Type Casting: A Complete Guide with Examples

Master Java Type Casting: A Complete Guide with Examples

Date- Dec 31,2022

Updated Jan 2026

6199

Narrowing Casting Widening Casting

What is Java Type Casting?

Java Type Casting is the process of converting a variable from one data type to another. This is particularly important in Java as it is a statically typed language, meaning that every variable must be declared with a specific data type. Type casting allows developers to use variables in a way that suits their needs, whether they’re working with integers, floats, or objects.

There are two primary types of casting in Java: widening casting and narrowing casting. Widening casting occurs automatically when you convert a smaller data type into a larger one, while narrowing casting requires explicit conversion. Understanding these concepts is crucial for avoiding data loss and ensuring program correctness.

Widening Casting

Widening casting is the process of converting a smaller primitive type to a larger primitive type. This type of casting is done automatically by the Java compiler, which means that you don’t need to specify the type explicitly. This is safe because there is no risk of losing information when converting to a larger data type.

The sequence of widening casting is as follows: byte → short → char → int → long → float → double. For example, when you assign an int value to a double variable, Java automatically converts it without any explicit casting required.

public class WideningCastingExample {
    public static void main(String[] args) {
        int myInt = 9;
        double myDouble = myInt; // Automatic casting: int to double
        System.out.println(myInt); // Outputs 9
        System.out.println(myDouble); // Outputs 9.0
    }
}

Narrowing Casting

Narrowing casting is the opposite of widening casting and involves converting a larger data type into a smaller one. This type of casting must be done explicitly by the programmer, as it can lead to data loss. For example, converting a double to an int will truncate the decimal part.

The sequence for narrowing casting is the reverse of widening: double → float → long → int → char → short → byte. Thus, when performing narrowing casting, it is essential to be aware of potential data loss.

public class NarrowingCastingExample {
    public static void main(String[] args) {
        double myDouble = 9.78d;
        int myInt = (int) myDouble; // Manual casting: double to int
        System.out.println(myDouble); // Outputs 9.78
        System.out.println(myInt); // Outputs 9
    }
}

Type Casting with Objects

In addition to primitive types, Java also supports type casting with objects, particularly when dealing with inheritance. In Java, you can cast an object of a subclass to a superclass and vice versa. This is known as upcasting and downcasting.

Upcasting is safe and done implicitly, where a subclass object is treated as a superclass object. Downcasting, however, requires explicit casting and can throw a ClassCastException if the object being cast is not an instance of the target class.

class Animal {
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    void sound() {
        System.out.println("Dog barks");
    }
}

public class TypeCastingExample {
    public static void main(String[] args) {
        Animal myAnimal = new Dog(); // Upcasting
        myAnimal.sound(); // Outputs "Dog barks"

        Dog myDog = (Dog) myAnimal; // Downcasting
        myDog.sound(); // Outputs "Dog barks"
    }
}

Edge Cases & Gotchas

Type casting can lead to various edge cases and unexpected behavior if not handled properly. One common issue is ClassCastException, which occurs during downcasting when the object being cast is not of the expected type. It is essential to use the instanceof operator to check the type before performing downcasting.

Another consideration is the loss of precision in narrowing casting. For example, converting a float to an int will result in the loss of the decimal part, which can lead to unexpected results if not accounted for in your logic.

public class EdgeCaseExample {
    public static void main(String[] args) {
        Object obj = "Hello";
        if (obj instanceof String) {
            String str = (String) obj; // Safe downcasting
            System.out.println(str);
        }
        // Example of precision loss
        float myFloat = 9.99f;
        int myInt = (int) myFloat; // Outputs 9, decimal is lost
    }
}

Performance & Best Practices

When working with type casting in Java, performance considerations should be taken into account, especially in performance-critical applications. Widening casting is generally efficient as it is handled automatically by the compiler. However, narrowing casting should be approached with caution due to the potential for data loss and the need for explicit handling.

Here are some best practices for type casting in Java:

  • Always check the type before downcasting using the instanceof operator to avoid ClassCastException.
  • Be mindful of precision loss when performing narrowing casting and document such conversions in your code.
  • Use generics when dealing with collections to avoid the need for casting altogether.
  • Consider the implications of casting on the readability and maintainability of your code.

Conclusion

In summary, type casting is a powerful feature in Java that allows for flexible data manipulation. By understanding the differences between widening and narrowing casting, as well as the implications of casting with objects, you can write more robust and error-free code. Here are the key takeaways:

  • Widening casting is done automatically and is safe, while narrowing casting requires explicit handling and can lead to data loss.
  • Type casting with objects involves upcasting and downcasting, with the need for type checks to avoid exceptions.
  • Be aware of edge cases such as ClassCastException and precision loss when performing type casts.
  • Follow best practices to enhance the performance and maintainability of your code.
Java Type Casting

S
Shubham Batra
Programming author at Code2Night — sharing tutorials on ASP.NET, C#, and more.
View all posts →

Related Articles

User-defined data types in java
Sep 05, 2023
How to add (import) java.util.List; in eclipse
Aug 31, 2023
org.openqa.selenium.SessionNotCreatedException: session not created exception
Aug 20, 2023
java.lang.IllegalStateException: The driver executable does not exist
Aug 21, 2023
Previous in Java
Java Program to Display Fibonacci Series
Next in Java
String Buffer in Java

Comments

On this page

🎯

Interview Prep

Ace your Java interview with curated Q&As for all levels.

View Java Interview Q&As

More in Java

  • Java Program to Display Fibonacci Series 4917 views
  • java.lang.IndexOutOfBoundsException 4274 views
  • Complete Guide to TreeMap in Java with Examples 4037 views
  • Default constructor in java 4027 views
  • Upcast and Downcast in Java 3835 views
View all Java posts →

Tags

AspNet C# programming AspNet MVC c programming AspNet Core C software development tutorial MVC memory management Paypal coding coding best practices data structures programming tutorial tutorials object oriented programming Slick Slider StripeNet
Free Download for Youtube Subscribers!

First click on Subscribe Now and then subscribe the channel and come back here.
Then Click on "Verify and Download" button for download link

Subscribe Now | 1770
Download
Support Us....!

Please Subscribe to support us

Thank you for Downloading....!

Please Subscribe to support us

Continue with Downloading
Be a Member
Join Us On Whatsapp
Code2Night

A community platform for sharing programming knowledge, tutorials, and blogs. Learn, write, and grow with developers worldwide.

Panipat, Haryana, India
info@code2night.com
Quick Links
  • Home
  • Blog Archive
  • Tutorials
  • About Us
  • Contact
  • Privacy Policy
  • Terms & Conditions
  • Guest Posts
  • SEO Analyzer
Dev Tools
  • JSON Beautifier
  • HTML Beautifier
  • CSS Beautifier
  • JS Beautifier
  • SQL Formatter
  • Diff Checker
  • Regex Tester
  • Markdown to HTML
  • Word Counter
More Tools
  • Password Generator
  • QR Code Generator
  • Hash Generator
  • Base64 Encoder
  • JWT Decoder
  • UUID Generator
  • Image Converter
  • PNG to ICO
  • SEO Analyzer
By Language
  • Angular
  • Angular js
  • ASP.NET
  • Asp.net Core
  • ASP.NET Core, C#
  • C
  • C#
  • C#, ASP.NET Core, Dapper
  • C#, ASP.NET Core, Dapper, Entity Framework
  • DotNet
  • HTML/CSS
  • Java
  • JavaScript
  • Node.js
  • Python
  • Python 3.11, Pandas, SQL
  • Python 3.11, SQL
  • Python 3.11, SQLAlchemy
  • Python 3.11, SQLAlchemy, SQL
  • Python 3.11, SQLite
  • React
  • Security
  • SQL Server
  • TypeScript
© 2026 Code2Night. All Rights Reserved.
Made with for developers  |  Privacy  ·  Terms
Translate Page
We use cookies to improve your experience and analyze site traffic. By clicking Accept, you consent to our use of cookies. Privacy Policy
Accessibility
Text size
High contrast
Grayscale
Dyslexia font
Highlight links
Pause animations
Large cursor