Java Object toString() - Convert To String

Updated on November 19, 2024
toString() header image

Introduction

The toString() method in Java is an integral part of the Object class and is used to return a string representation of an object. When an object is printed or converted to a string for debugging or logging purposes, the toString() method is automatically called. By default, the toString() method returns a string consisting of the class name followed by "@" and then the hashcode of the object.

In this article, you will learn how to effectively utilize the toString() method to customize the string representations of objects in Java. Explore various examples that demonstrate overriding the default implementation to make the output more meaningful and useful for debugging purposes.

Default Implementation of toString()

Understand how the default toString() method works in Java by examining its typical output and then overriding it to gain more control and readability.

Explore Default Output

  1. Create a simple Java class and instantiate an object.

  2. Print the object to see the default toString() output.

    java
    public class Vehicle {
        private String brand;
        private int year;
    
        public Vehicle(String brand, int year) {
            this.brand = brand;
            this.year = year;
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Vehicle myCar = new Vehicle("Toyota", 2022);
            System.out.println(myCar);
        }
    }
    

    This code will print something like Vehicle@4a574795, which is not very informative. It combines the class name (Vehicle) with the instance's hashcode.

Customizing toString()

Enhancing readability and usefulness of object outputs by overriding the toString() method.

Simple Override

  1. Override the toString() method to include relevant object details.

  2. Update the class and print the object again.

    java
    public class Vehicle {
        private String brand;
        private int year;
    
        public Vehicle(String brand, int year) {
            this.brand = brand;
            this.year = year;
        }
    
        @Override
        public String toString() {
            return "Vehicle{brand='" + brand + "', year=" + year + '}';
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Vehicle myCar = new Vehicle("Toyota", 2022);
            System.out.println(myCar);
        }
    }
    

    This override changes the output to a more meaningful Vehicle{brand='Toyota', year=2022}.

Implementing with Complex Objects

  1. Add a nested object within your class.

  2. Update toString() to handle the nested object.

    java
    public class Engine {
        private int horsepower;
    
        public Engine(int horsepower) {
            this.horsepower = horsepower;
        }
    
        @Override
        public String toString() {
            return "Engine{horsepower=" + horsepower + '}';
        }
    }
    
    public class Vehicle {
        private String brand;
        private int year;
        private Engine engine;
    
        public Vehicle(String brand, int year, Engine engine) {
            this.brand = brand;
            this.year = year;
            this.engine = engine;
        }
    
        @Override
        public String toString() {
            return "Vehicle{brand='" + brand + "', year=" + year + ", engine=" + engine + '}';
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Engine myEngine = new Engine(300);
            Vehicle myCar = new Vehicle("Toyota", 2022, myEngine);
            System.out.println(myCar);
        }
    }
    

    This code includes the engine’s details in the vehicle’s string representation, further improving detail and clarity: Vehicle{brand='Toyota', year=2022, engine=Engine{horsepower=300}}.

Conclusion

The toString() method in Java provides a mechanism to return a string representation of an object. Overriding this method in your classes allows for more readable and useful output, facilitating easier debugging and logging. By customizing the toString() method to better describe an object’s state, you enhance the maintainability and clarity of your Java applications. Implement these strategies in your classes to ensure your objects’ representations are both informative and concise.