HowToDoInJava

  • Python
  • Java
  • Spring Boot
  • Dark Mode
Home / Java / Java Array / Java Array Clone – Deep Copy vs Shallow Copy

Java Array Clone – Deep Copy vs Shallow Copy

Learn to create clone of an array in Java with example. Clone creates shallow copy of an array. Also learn to create array deep copy.

1. Array Clone – Shallow Copy

In Java, to create clone of array, you should use clone() method of array. It creates a shallow copy of array.

Cloning always creates shallow copy of array. Any change (in original array) will be reflected in cloned array as well.

package com.howtodoinjava.demo;

public class ArrayCloneExample 
{
	public static void main(String[] args) 
	{
		Employee[] empArr = new Employee[2];	//Original array

		empArr[0] = new Employee(100, "Lokesh", "Gupta", new Department(1, "HR"));
		empArr[1] = new Employee(200, "Pankaj", "Kumar", new Department(2, "Finance"));
		
		Employee[] clonedArray = empArray.clone();	//Shallow copied array
		
		empArray[0].setFirstName("Unknown");
		empArray[0].getDepartment().setName("Unknown");
		
		//Verify the change in original array - "CHANGED"
		System.out.println(empArray[0].getFirstName());						//Unknown
		System.out.println(empArray[0].getDepartment().getName());			//Unknown
		
		//Verify the change in cloned array - "CHANGED"
		System.out.println(clonedArray[0].getFirstName());					//Unknown
		System.out.println(clonedArray[0].getDepartment().getName());		//Unknown
	}
}

2. Array Deep Copy

If you want to create deep copy of an array in Java, then use Apache Common’s SerializationUtils.clone( array ) method.

package com.howtodoinjava.demo;

import org.apache.commons.lang3.SerializationUtils;

public class ArrayCloneExample 
{
	public static void main(String[] args) 
	{
		Employee[] empArray = new Employee[2];
		
		empArray[0] = new Employee(100, "Lokesh", "Gupta", new Department(1, "HR"));
		empArray[1] = new Employee(200, "Pankaj", "Kumar", new Department(2, "Finance"));
		
		Employee[] copiedArray = SerializationUtils.clone(empArray);	//Deep copied array
		
		empArray[0].setFirstName("Unknown");
		empArray[0].getDepartment().setName("Unknown");
		
		//Verify the change in original array - "CHANGED"
		System.out.println(empArray[0].getFirstName());						//Unknown
		System.out.println(empArray[0].getDepartment().getName());			//Unknown
		
		//Verify the change in deep copied array - "UNCHANGED"
		System.out.println(copiedArray[0].getFirstName());					//Lokesh
		System.out.println(copiedArray[0].getDepartment().getName());		//HR
	}
}

3. Complete Code

Complete code for creating shallow and deep copy of array in java.

package com.howtodoinjava.demo;

import org.apache.commons.lang3.SerializationUtils;

public class ArrayCloneExample 
{
	public static void main(String[] args) 
	{
		Employee[] empArray = new Employee[2];
		
		empArray[0] = new Employee(100, "Lokesh", "Gupta", new Department(1, "HR"));
		empArray[1] = new Employee(200, "Pankaj", "Kumar", new Department(2, "Finance"));
		
		Employee[] clonedArray = empArray.clone();						//Array clone
		
		Employee[] copiedArray = SerializationUtils.clone(empArray);	//Deep copied array
		
		empArray[0].setFirstName("Unknown");
		empArray[0].getDepartment().setName("Unknown");
		
		//Verify the change in original array - "CHANGED"
		System.out.println(empArray[0].getFirstName());						//Unknown
		System.out.println(empArray[0].getDepartment().getName());			//Unknown
		
		//Verify the change in cloned array - "CHANGED"
		System.out.println(clonedArray[0].getFirstName());					//Unknown
		System.out.println(clonedArray[0].getDepartment().getName());		//Unknown
		
		//Verify the change in deep copied array - "UNCHANGED"
		System.out.println(copiedArray[0].getFirstName());					//Lokesh
		System.out.println(copiedArray[0].getDepartment().getName());		//HR
	}
}
package com.howtodoinjava.demo;

import java.io.Serializable;

public class Employee implements Serializable {

	private static final long serialVersionUID = 1L;
	
	private Integer id;
	private String firstName;
	private String lastName;
	private Department department;

	public Employee(int id, String fName, String lName, Department department) {
		super();
		this.id = id;
		this.firstName = fName;
		this.lastName = lName;
		this.department = department;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public Department getDepartment() {
		return department;
	}

	public void setDepartment(Department department) {
		this.department = department;
	}

	@Override
	public String toString() {
		return "Employee [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + "]";
	}
}
package com.howtodoinjava.demo;

import java.io.Serializable;

public class Department implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	Integer id;
	String name;
	
	public Department(Integer id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "Department [id=" + id + ", name=" + name + "]";
	}
}

Happy Learning !!

References:

SerializationUtils Java Doc

Was this post helpful?

Let us know if you liked the post. That’s the only way we can improve.

Share this:

  • Twitter
  • Facebook
  • LinkedIn
  • Reddit

About Lokesh Gupta

A family guy with fun loving nature. Love computers, programming and solving everyday problems. Find me on Facebook and Twitter.

Feedback, Discussion and Comments

  1. Matías Leonardo Daniel Juarez

    June 24, 2019

    Hi. I just want to point that in the first chunk of code you are doing a deep copy when it should be a shallow copy.
    Anyway.. in the “complete code” section, we can see how to create a shallow copy.
    Thanks for these tutorials. I’m fascinated! 😀

    • Lokesh Gupta

      June 25, 2019

      That was a typo. Thanks for pointing it. Cheers !!

Comments are closed on this article!

Search Tutorials

Java Array

  • Java – Array Introduction
  • Java – Print Array
  • Java – Print 2D Array
  • Java – Copy Array
  • Java – Copy Array Range
  • Java – Clone Array
  • Java – Array Deep Copy
  • Java – String to String[]
  • Java – byte[] to String
  • Java – String to byte[]
  • Java – Array Union
  • Java – Array Intersection
  • Array – Remove duplicate elements

Java Tutorial

  • Java Introduction
  • Java Keywords
  • Java Flow Control
  • Java OOP
  • Java Inner Class
  • Java String
  • Java Enum
  • Java Collections
  • Java ArrayList
  • Java HashMap
  • Java Array
  • Java Sort
  • Java Clone
  • Java Date Time
  • Java Concurrency
  • Java Generics
  • Java Serialization
  • Java Input Output
  • Java New I/O
  • Java Exceptions
  • Java Annotations
  • Java Reflection
  • Java Garbage collection
  • Java JDBC
  • Java Security
  • Java Regex
  • Java Servlets
  • Java XML
  • Java Puzzles
  • Java Examples
  • Java Libraries
  • Java Resources
  • Java 14
  • Java 12
  • Java 11
  • Java 10
  • Java 9
  • Java 8
  • Java 7

Meta Links

  • About Me
  • Contact Us
  • Privacy policy
  • Advertise
  • Guest and Sponsored Posts

Recommended Reading

  • 10 Life Lessons
  • Secure Hash Algorithms
  • How Web Servers work?
  • How Java I/O Works Internally?
  • Best Way to Learn Java
  • Java Best Practices Guide
  • Microservices Tutorial
  • REST API Tutorial
  • How to Start New Blog

Copyright © 2020 · HowToDoInjava.com · All Rights Reserved. | Sitemap

  • Java 15 New Features
  • Sealed Classes and Interfaces
  • EdDSA (Ed25519 / Ed448)