How to Create An Immutable Class in java?


To create an immutable class in java, you have to do the following steps. Declare the class as final so it can’t be extended. Make all fields private so that direct access is not allowed.

1. Immutable Class in Java

This is a common nterview question for 2-4 years java experienced developer. In this tutorial, We'll learn "How to Create Immutable Class in java?" You'll learn why we need to create Immutable class and what are the advantages and as well the disadvantages of it.

Immutable class means it cannot be modified once it is created. If any modification on an immutable object then the result will give another immutable object.

How to Create An Immutable Class in java?

Builtin API immutable classes:

String, StringBuffer, and all wrapper classes, etc.

2. Advantages

Let us see the benefits of creating an immutable class in java.

A)    It provides thread safety and can be shared with other threads without any external synchronization in a concurrent environment.
B)    An immutable object simplifies development time and easier to share with several threads.
C)    Immutable object improves the performance by reducing synchronization code.

3. Disadvantages: 

Below are the disadvantages of creating immutable classes in the wrong scenarios.

A)    Sensitive data can be saved in memory like a password’s. better to use char[] array over the string.
B)    Immutable objects cannot be reused. Just use and throw. It's heavy for garbage collection.

4. Rules:

To create an immutable class in java, you have to do the following steps.
  1. Declare the class as final so it can’t be extended.
  2. Make all fields private so that direct access is not allowed.
  3. Don’t provide setter methods for variables
  4. Make all mutable fields final so that it values can be assigned only once.
  5. Initialize all the fields via a constructor performing the deep copy.
  6. Perform cloning of objects in the getter methods to return a copy rather than returning the actual object reference.
Even though, In String class hashcode() method is non – final and will return always unique value.

5. Java Program To Create Immutable class 

package com.java.w3schools.immutable.class;

final class StudentImmutableClass {
    private final int rollNo;
    private final String name;

    public StudentImmutableClass(int rollNo, String name) {
        this.rollNo = rollNo;
        this.name = name;
    public int getRollNo() {
        return rollNo;
    public String getName() {
        return name;

Main Class:

public class ImmutableExample {
    public static void main(String[] args) {
        System.out.println("Creating Immutable object example in java");
        StudentImmutableClass student1 = new StudentImmutableClass(1, "adeepdrive");
        System.out.println("Immutable object student1 roll no : " + student1.getRollNo());
        System.out.println("Immutable object student1 name : " + student1.getRollNo());


Creating Immutable object example in java
Immutable object student1 roll no : 1
Immutable object student1 name : 1

Here no chance to modify the student1 object. Because it has no setter methods and class is declared as final. So, subclasses as well can not modify them.

6. Instance members references to another class (Eg. Date):

In case, if Immutable class has the references to a Mutable class (java.util.Date). Despite storing the Date into the final variable, its internal values can be changed by the calling Date class methods such as set() method. So, we lost its original data.

It is advised to return a copy of the original object so that original date value can not be modified. If any modification is done to the returned Date object, those values do not modify the original Date object. Finally, we can preserve the immutability of class.

 public final class ImmutableReminder{
    private final Date remindingDate;
    public ImmutableReminder (Date remindingDate) {
        if(remindingDate.getTime() < System.currentTimeMillis()){
            throw new IllegalArgumentException("Can not set reminder" + " for past time: " + remindingDate);
        this.remindingDate = new Date(remindingDate.getTime());
    public Date getRemindingDate() {
        return (Date) remindingDate.clone();

7. Conclusion

In this tutorial, We've seen the rules, advantages, and disadvantages of an immutable class.

And also seen how to create an immutable class?

What happens if an Immutable class has references to a Mutable class such as Date or StringBuffer etc.

Discussed all of these in detail in this post. If you like please share this article with friends.

8. Other References

These are the additional references used in this article.

String API

Official Ref




About Us

Author: Venkatesh - I love to learn and share the technical stuff.

accumulo,1,ActiveMQ,2,Adsense,1,API,37,ArrayList,18,Arrays,24,Bean Creation,3,Bean Scopes,1,BiConsumer,1,Blogger Tips,1,Books,1,C Programming,1,Collection,8,Collections,37,Collector,1,Command Line,1,Comparator,1,Compile Errors,1,Configurations,7,Constants,1,Control Statements,8,Conversions,6,Core Java,149,Corona India,1,Create,2,CSS,1,Date,3,Date Time API,38,Dictionary,1,Difference,2,Download,1,Eclipse,3,Efficiently,1,Error,1,Errors,1,Exceptions,8,Fast,1,Files,17,Float,1,Font,1,Form,1,Freshers,1,Function,3,Functional Interface,2,Garbage Collector,1,Generics,4,Git,9,Grant,1,Grep,1,HashMap,2,HomeBrew,2,HTML,2,HttpClient,2,Immutable,1,Installation,1,Interview Questions,6,Iterate,2,Jackson API,3,Java,32,Java 10,1,Java 11,6,Java 12,5,Java 13,2,Java 14,2,Java 8,128,Java 8 Difference,2,Java 8 Stream Conversions,4,java 8 Stream Examples,12,Java 9,1,Java Conversions,14,Java Design Patterns,1,Java Files,1,Java Program,3,Java Programs,114,Java Spark,1,java.lang,4,java.util. function,1,JavaScript,1,jQuery,1,Kotlin,11,Kotlin Conversions,6,Kotlin Programs,10,Lambda,2,lang,29,Leap Year,1,live updates,1,LocalDate,1,Logging,1,Mac OS,3,Math,1,Matrix,6,Maven,1,Method References,1,Mockito,1,MongoDB,3,New Features,1,Operations,1,Optional,6,Oracle,5,Oracle 18C,1,Partition,1,Patterns,1,Programs,1,Property,1,Python,2,Quarkus,1,Read,1,Real Time,1,Recursion,2,Remove,2,Rest API,1,Schedules,1,Serialization,1,Servlet,2,Sort,1,Sorting Techniques,8,Spring,2,Spring Boot,23,Spring Email,1,Spring MVC,1,Streams,31,String,61,String Programs,28,String Revese,1,StringBuilder,1,Swing,1,System,1,Tags,1,Threads,11,Tomcat,1,Tomcat 8,1,Troubleshoot,26,Unix,3,Updates,3,util,5,While Loop,1,
JavaProgramTo.com: How to Create An Immutable Class in java?
How to Create An Immutable Class in java?
To create an immutable class in java, you have to do the following steps. Declare the class as final so it can’t be extended. Make all fields private so that direct access is not allowed.
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content