{"id":25527784,"date":"2022-06-11T18:27:32","date_gmt":"2022-06-11T12:57:32","guid":{"rendered":"https:\/\/entri.app\/blog\/?p=25527784"},"modified":"2022-11-23T15:29:00","modified_gmt":"2022-11-23T09:59:00","slug":"what-is-cloning-in-java-and-its-types","status":"publish","type":"post","link":"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/","title":{"rendered":"What is Cloning in Java and its Types?"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-69d46a078a541\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-69d46a078a541\"  aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#Object_Cloning_in_Java\" >Object Cloning in Java<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#Advantage_of_Object_cloning\" >Advantage of Object cloning<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#Disadvantage_of_Object_cloning\" >Disadvantage of Object cloning<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#Shallow_Copy_of_an_Object\" >Shallow Copy of an Object<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#Deep_Copying_in_Java\" >Deep Copying in Java<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#Deep_Cloning_with_Serialization\" >Deep Cloning with Serialization<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#Java_deep_copy_using_in-memory_serialization\" >Java deep copy using in-memory serialization<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#1_Java_deep_copy_example\" >1. Java deep copy example<\/a><\/li><\/ul><\/nav><\/div>\n<div>\n<div class=\"article-title\">\n<p>Cloning means creating a copy of the original object. Its dictionary meaning is: \u201cmake an identical copy of\u201c.<\/p>\n<p>By default,\u00a0Java cloning is \u2018field by field copy\u2019\u00a0because the Object class does not have any idea about the structure of the class on which the\u00a0<em>clone()<\/em>\u00a0method will be invoked.<\/p>\n<p><a href=\"https:\/\/bit.ly\/3ELmCiA\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-25520910 size-full\" src=\"https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/04\/Python-and-Machine-Learning-Square.png\" alt=\"Python and Machine Learning Square\" width=\"345\" height=\"345\" srcset=\"https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/04\/Python-and-Machine-Learning-Square.png 345w, https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/04\/Python-and-Machine-Learning-Square-300x300.png 300w, https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/04\/Python-and-Machine-Learning-Square-150x150.png 150w, https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/04\/Python-and-Machine-Learning-Square-24x24.png 24w, https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/04\/Python-and-Machine-Learning-Square-48x48.png 48w, https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/04\/Python-and-Machine-Learning-Square-96x96.png 96w, https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/04\/Python-and-Machine-Learning-Square-75x75.png 75w\" sizes=\"auto, (max-width: 345px) 100vw, 345px\" \/><\/a><\/p>\n<p>So, JVM when called for cloning, does the following things:<\/p>\n<ul>\n<li><strong>If the class has only primitive data type members<\/strong>\u00a0then a completely new copy of the object will be created and the reference to the new object copy will be returned.<\/li>\n<li><strong>If the class contains members of any class type<\/strong>\u00a0then only the object references to those members are copied and hence the member references in both the original object as well as the cloned object refer to the same object.<\/li>\n<\/ul>\n<p>Apart from the above default behavior, we can always override this behavior and specify your own. This is done by overriding the\u00a0<code>clone()<\/code>\u00a0method. Let\u2019s see how it is done.<\/p>\n<\/div>\n<\/div>\n<div class=\"text\">\n<p>Object cloning means to create an exact copy of the original object.<\/p>\n<p style=\"text-align: center;\"><strong><a href=\"https:\/\/bit.ly\/3ELmCiA\" target=\"_blank\" rel=\"noopener\">Learn Coding in your Language! Enroll Here!<\/a><\/strong><\/p>\n<p>If a class needs to support cloning, it must implement java.lang.Cloneable interface and override clone() method from Object class. Syntax of the clone() method is :<\/p>\n<pre>protected Object clone() throws CloneNotSupportedException<\/pre>\n<p>If the object\u2019s class doesn\u2019t implement Cloneable interface then it throws an exception \u2018CloneNotSupportedException\u2019 .<\/p>\n<div class=\"code-block\">\n<div class=\"code-container\">\n<div id=\"highlighter_83970\" class=\"syntaxhighlighter nogutter\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"comments\">\/\/ Java code for cloning an object<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"undefined spaces\">\u00a0<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"keyword\">class<\/code> <code class=\"plain\">Test <\/code><code class=\"keyword\">implements<\/code> <code class=\"plain\">Cloneable<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"plain\">{<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"keyword\">int<\/code> <code class=\"plain\">a;<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"keyword\">int<\/code> <code class=\"plain\">b;<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"undefined spaces\">\u00a0<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"comments\">\/\/ Parameterized constructor<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">Test(<\/code><code class=\"keyword\">int<\/code> <code class=\"plain\">a, <\/code><code class=\"keyword\">int<\/code> <code class=\"plain\">b)<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">{<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"keyword\">this<\/code><code class=\"plain\">.a = a;<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"keyword\">this<\/code><code class=\"plain\">.b = b;<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">}<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"undefined spaces\">\u00a0<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"comments\">\/\/ Method that calls clone()<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">Test cloning()<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">{<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"keyword\">try<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">{<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"keyword\">return<\/code> <code class=\"plain\">(Test) <\/code><code class=\"keyword\">super<\/code><code class=\"plain\">.clone();<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">}<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"keyword\">catch<\/code><code class=\"plain\">(CloneNotSupportedException e)<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">{<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">System.out.println(<\/code><code class=\"string\">\"CloneNotSupportedException is caught\"<\/code><code class=\"plain\">);<\/code><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"keyword\">return<\/code> <code class=\"keyword\">this<\/code><code class=\"plain\">;<\/code><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">}<\/code><\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">}<\/code><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"plain\">}<\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"undefined spaces\">\u00a0<\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"keyword\">class<\/code> <code class=\"plain\">demo<\/code><\/div>\n<div class=\"line number31 index30 alt2\"><code class=\"plain\">{<\/code><\/div>\n<div class=\"line number32 index31 alt1\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"keyword\">public<\/code> <code class=\"keyword\">static<\/code> <code class=\"keyword\">void<\/code> <code class=\"plain\">main(String args[])<\/code><\/div>\n<div class=\"line number33 index32 alt2\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">{<\/code><\/div>\n<div class=\"line number34 index33 alt1\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">Test obj1 = <\/code><code class=\"keyword\">new<\/code> <code class=\"plain\">Test(<\/code><code class=\"value\">1<\/code><code class=\"plain\">, <\/code><code class=\"value\">2<\/code><code class=\"plain\">);<\/code><\/div>\n<div class=\"line number35 index34 alt2\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">Test obj2 = obj1.cloning();<\/code><\/div>\n<div class=\"line number36 index35 alt1\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">obj1.a = <\/code><code class=\"value\">3<\/code><code class=\"plain\">;<\/code><\/div>\n<div class=\"line number37 index36 alt2\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">obj1.b = <\/code><code class=\"value\">4<\/code><code class=\"plain\">;<\/code><\/div>\n<div class=\"line number38 index37 alt1\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">System.out.println(<\/code><code class=\"string\">\"Object2 is a clone of object1\"<\/code><code class=\"plain\">);<\/code><\/div>\n<div class=\"line number39 index38 alt2\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">System.out.println(<\/code><code class=\"string\">\"obj1.a = \"<\/code> <code class=\"plain\">+ obj1.a + <\/code><code class=\"string\">\" obj1.b = \"<\/code> <code class=\"plain\">+ obj1.b);<\/code><\/div>\n<div class=\"line number40 index39 alt1\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">System.out.println(<\/code><code class=\"string\">\"obj2.a = \"<\/code> <code class=\"plain\">+ obj2.a + <\/code><code class=\"string\">\" obj2.b = \"<\/code> <code class=\"plain\">+ obj2.b);<\/code><\/div>\n<div class=\"line number41 index40 alt2\"><code class=\"undefined spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"plain\">}<\/code><\/div>\n<div class=\"line number42 index41 alt1\"><code class=\"plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<p>Output :<\/p>\n<pre>Object2 is a clone of object1\r\nobj1.a = 3 obj1.b = 4\r\nobj2.a = 1 obj2.b = 2\r\n\r\n<\/pre>\n<h2 class=\"h1\"><span class=\"ez-toc-section\" id=\"Object_Cloning_in_Java\"><\/span><strong>Object Cloning in Java<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>The object cloning\u00a0is a way to create exact copy of an object. The clone() method of Object class is used to clone an object.<\/p>\n<p>The\u00a0java.lang.Cloneable interface\u00a0must be implemented by the class whose object clone we want to create. If we don&#8217;t implement Cloneable interface, clone() method generates\u00a0CloneNotSupportedException.<\/p>\n<p>The\u00a0clone() method is defined in the Object class. Syntax of the clone() method is as follows:<\/p>\n<div class=\"codeblock\">\n<div class=\"dp-highlighter\">\n<ol class=\"dp-j\" start=\"1\">\n<li class=\"alt\"><span class=\"keyword\">protected<\/span>\u00a0Object\u00a0clone()\u00a0<span class=\"keyword\">throws<\/span>\u00a0CloneNotSupportedException<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<h3 class=\"h4\"><strong>Why use clone() method ?<\/strong><\/h3>\n<p>The\u00a0<b>clone() method<\/b> saves the extra processing task for creating the exact copy of an object. If we perform it by using the new keyword, it will take a lot of processing time to be performed that is why we use object cloning.<\/p>\n<h2 class=\"h4\"><span class=\"ez-toc-section\" id=\"Advantage_of_Object_cloning\"><\/span><strong>Advantage of Object cloning<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Although Object.clone() has some design issues but it is still a popular and easy way of copying objects. Following is a list of advantages of using clone() method:<\/p>\n<ul>\n<li>You don&#8217;t need to write lengthy and repetitive codes. Just use an abstract class with a 4- or 5-line long clone() method.<\/li>\n<li>It is the easiest and most efficient way for copying objects, especially if we are applying it to an already developed or an old project. Just define a parent class, implement Cloneable in it, provide the definition of the clone() method and the task will be done.<\/li>\n<li>Clone() is the fastest way to copy array.<\/li>\n<\/ul>\n<h2 class=\"h4\"><span class=\"ez-toc-section\" id=\"Disadvantage_of_Object_cloning\"><\/span><strong>Disadvantage of Object cloning<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Following is a list of some disadvantages of clone() method:<\/p>\n<ul>\n<li>To use the Object.clone() method, we have to change a lot of syntaxes to our code, like implementing a Cloneable interface, defining the clone() method and handling CloneNotSupportedException, and finally, calling Object.clone() etc.<\/li>\n<li>We have to implement cloneable interface while it doesn&#8217;t have any methods in it. We just have to use it to tell the JVM that we can perform clone() on our object.<\/li>\n<li>Object.clone() is protected, so we have to provide our own clone() and indirectly call Object.clone() from it.<\/li>\n<li>Object.clone() doesn&#8217;t invoke any constructor so we don&#8217;t have any control over object construction.<\/li>\n<li>If you want to write a clone method in a child class then all of its superclasses should define the clone() method in them or inherit it from another parent class. Otherwise, the super.clone() chain will fail.<\/li>\n<li>Object.clone() supports only shallow copying but we will need to override it if we need deep cloning.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Shallow_Copy_of_an_Object\"><\/span><strong>Shallow Copy of an Object<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Shallow cloning is the\u00a0<em>\u201cdefault implementation\u201d<\/em>\u00a0in Java. In overridden\u00a0<code>clone()<\/code>\u00a0method, if we are not cloning all the object types (not primitives), then we are making a shallow copy.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Deep_Copying_in_Java\"><\/span><strong>Deep Copying in Java<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Deep cloning\u00a0or\u00a0deep copying\u00a0is the desired behavior in most cases. In the deep copy, we\u00a0create a clone that is independent of the original object\u00a0and making changes in the cloned object should not affect the original object.<\/p>\n<p>Let\u2019s see how deep copy is created in Java.<\/p>\n<div class=\"prism-titlename\">Deep cloning the Employee object<\/div>\n<pre class=\"wp-block-code language-java\" title=\"Deep cloning the Employee object\"><code class=\" language-java\"><span class=\"token comment\">\/\/Modified clone() method in Employee class<\/span>\r\n<span class=\"token annotation punctuation\">@Override<\/span>\r\n<span class=\"token keyword\">protected<\/span> <span class=\"token class-name\">Object<\/span> <span class=\"token function\">clone<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">throws<\/span> <span class=\"token class-name\">CloneNotSupportedException<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t<span class=\"token class-name\">Employee<\/span> cloned <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Employee<\/span><span class=\"token punctuation\">)<\/span><span class=\"token keyword\">super<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">clone<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\tcloned<span class=\"token punctuation\">.<\/span><span class=\"token function\">setDepartment<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Department<\/span><span class=\"token punctuation\">)<\/span>cloned<span class=\"token punctuation\">.<\/span><span class=\"token function\">getDepartment<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">clone<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token keyword\">return<\/span> cloned<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<p>Here , we modified the <code>Employee<\/code>\u00a0classes\u00a0<code>clone()<\/code>\u00a0method and added following\u00a0<code>clone<\/code>\u00a0method in\u00a0<code>Department<\/code>\u00a0class.<\/p>\n<div class=\"prism-titlename\">Department.java<\/div>\n<pre class=\"wp-block-code language-java\" title=\"Department.java\"><code class=\" language-java\"><span class=\"token comment\">\/\/Defined clone method in Department class.<\/span>\r\n<span class=\"token annotation punctuation\">@Override<\/span>\r\n<span class=\"token keyword\">protected<\/span> <span class=\"token class-name\">Object<\/span> <span class=\"token function\">clone<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">throws<\/span> <span class=\"token class-name\">CloneNotSupportedException<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t<span class=\"token keyword\">return<\/span> <span class=\"token keyword\">super<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">clone<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<p>Now testing our cloning code gives the desired result and the name of the department will not be modified in the clone object.<\/p>\n<div class=\"prism-titlename\">Testing deep cloning<\/div>\n<pre class=\"wp-block-code language-java\" title=\"Testing deep cloning\"><code class=\" language-java\"><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">TestCloning<\/span>\r\n<span class=\"token punctuation\">{<\/span>\r\n\t<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">throws<\/span> <span class=\"token class-name\">CloneNotSupportedException<\/span>\r\n\t<span class=\"token punctuation\">{<\/span>\r\n\t\t<span class=\"token class-name\">Department<\/span> hr <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">Department<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">\"Human Resource\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n\t\t<span class=\"token class-name\">Employee<\/span> original <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">Employee<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">\"Admin\"<\/span><span class=\"token punctuation\">,<\/span> hr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token class-name\">Employee<\/span> cloned <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Employee<\/span><span class=\"token punctuation\">)<\/span> original<span class=\"token punctuation\">.<\/span><span class=\"token function\">clone<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n\t\t<span class=\"token comment\">\/\/Let change the department name in cloned object and we will verify in original object<\/span>\r\n\t\tcloned<span class=\"token punctuation\">.<\/span><span class=\"token function\">getDepartment<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">setName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Finance\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n\t\t<span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span>original<span class=\"token punctuation\">.<\/span><span class=\"token function\">getDepartment<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span>cloned<span class=\"token punctuation\">.<\/span><span class=\"token function\">getDepartment<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">getName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n<span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<div class=\"prism-titlename\">Output<\/div>\n<pre class=\"wp-block-code language-java\" title=\"Output\"><code class=\" language-java\"><span class=\"token class-name\">Human<\/span> <span class=\"token class-name\">Resource<\/span>\r\n<span class=\"token class-name\">Finance<\/span><\/code><\/pre>\n<p>Here, changing the state of the cloned object does not affect the original object.<\/p>\n<p>So deep cloning requires satisfaction of following rules \u2013<\/p>\n<ul>\n<li>No need to separately copy primitives.<\/li>\n<li>All the member classes in original class should support cloning and in clone method of original class in context should call\u00a0<code>super.clone()<\/code>\u00a0on all member classes.<\/li>\n<li>If any member class does not support cloning then in clone method, one must create a new instance of that member class and copy all its attributes one by one to new member class object. This new member class object will be set in cloned object.<\/li>\n<\/ul>\n<p style=\"text-align: center;\"><a href=\"https:\/\/bit.ly\/3ELmCiA\" target=\"_blank\" rel=\"noopener\"><strong>Learn to code from industry experts! Enroll here<\/strong><\/a><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Deep_Cloning_with_Serialization\"><\/span><strong>Deep Cloning with Serialization<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Serialization is another easy way of deep cloning. In this method, we serialize the object to be cloned and de-serialize it back. Obviously, the object, that needs to be cloned, should implement\u00a0<code>Serializable<\/code>\u00a0interface.<\/p>\n<p>Before going any further, you should be aware that this technique is not to be used lightly.<\/p>\n<ol>\n<li>First of all,\u00a0serialization is hugely expensive. It could easily be a hundred times more expensive than the\u00a0<code>clone()<\/code>\u00a0method.<\/li>\n<li>Second, not all objects are\u00a0<code>Serializable<\/code>.<\/li>\n<li>Third, making a class\u00a0<code>Serializable<\/code>\u00a0is tricky and not all classes can be relied on to get it right.<\/li>\n<\/ol>\n<header class=\"entry-header\" aria-label=\"Content\">\n<div class=\"gb-container gb-container-bbc00baa\">\n<div class=\"gb-inside-container\">\n<h2 class=\"gb-headline gb-headline-7bdea7cd gb-headline-text\"><span class=\"ez-toc-section\" id=\"Java_deep_copy_using_in-memory_serialization\"><\/span><strong>Java deep copy using in-memory serialization<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<\/div>\n<\/div>\n<\/header>\n<div class=\"entry-content\">\n<p>We know that the easiest way of deep cloning (<em>with some performance overhead<\/em>) or deep copy is\u00a0Serialization. Java serialization involves serializing the object into bytes and from bytes to object again.<\/p>\n<p>It is better to use in memory deep cloning whenever it is the only need and you don\u2019t need to persist the object for future use. In this Java deep cloning example, you can see one mechanism of in-memory deep cloning for your reference.<\/p>\n<p>Please remember that deep cloning is evil for\u00a0singleton pattern. It makes possible of having multiple instances of singleton classes.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"1_Java_deep_copy_example\"><\/span><strong>1. Java deep copy example<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>In this program, we can see a demo class named <code>SerializableClass<\/code>. This has three variables i.e.\u00a0<code>firstName<\/code>,\u00a0<code>lastName<\/code>\u00a0and\u00a0<code>permissions<\/code>. I will add a\u00a0<em><strong>deepCopy()<\/strong>\u00a0instance level method<\/em>\u00a0to this class. Whenever invoked on an instance of\u00a0<code>SerializableClass<\/code>, it will return exact clone \/ deep copy of that instance.<\/p>\n<p>For deep cloning, we have to first serialization and then deserialization. For serialization, I have used\u00a0<code>ByteArrayOutputStream<\/code>\u00a0and\u00a0<code>ObjectOutputStream<\/code>. For deserialization, I have used\u00a0<code>ByteArrayInputStream<\/code>\u00a0and\u00a0<code>ObjectInputStream<\/code>.<\/p>\n<h4 style=\"text-align: center;\"><strong><a href=\"https:\/\/entri.sng.link\/Bcofz\/uu8c\/w409\" target=\"_blank\" rel=\"noopener\">Grab the opportunity to learn Java with Entri! Click Here<\/a><\/strong><\/h4>\n<div>\n<div id=\"highlighter_810905\" class=\"syntaxhighlighter nogutter java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<caption>SerializableClass.java<\/caption>\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java keyword\">package<\/code> <code class=\"java plain\">serializationTest;<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">java.io.ByteArrayInputStream;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">java.io.ByteArrayOutputStream;<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">java.io.ObjectInputStream;<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">java.io.ObjectOutputStream;<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">java.io.Serializable;<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">java.util.ArrayList;<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">java.util.List;<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">class<\/code> <code class=\"java plain\">SerializableClass <\/code><code class=\"java keyword\">implements<\/code> <code class=\"java plain\">Serializable<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">private<\/code> <code class=\"java keyword\">static<\/code> <code class=\"java keyword\">final<\/code> <code class=\"java keyword\">long<\/code> <code class=\"java plain\">serialVersionUID = 1L;<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">private<\/code> <code class=\"java plain\">String firstName = <\/code><code class=\"java keyword\">null<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">private<\/code> <code class=\"java plain\">String lastName = <\/code><code class=\"java keyword\">null<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java color1\">@SuppressWarnings<\/code><code class=\"java plain\">(<\/code><code class=\"java string\">\"serial\"<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">private<\/code> <code class=\"java plain\">List permissions = <\/code><code class=\"java keyword\">new<\/code> <code class=\"java plain\">ArrayList()<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">add(<\/code><code class=\"java string\">\"ADMIN\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">add(<\/code><code class=\"java string\">\"USER\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">};<\/code><\/div>\n<div class=\"line number27 index26 alt2\"><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">public<\/code> <code class=\"java plain\">SerializableClass(<\/code><code class=\"java keyword\">final<\/code> <code class=\"java plain\">String fName, <\/code><code class=\"java keyword\">final<\/code> <code class=\"java plain\">String lName)<\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/\/validateNameParts(fName);<\/code><\/div>\n<div class=\"line number31 index30 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/\/validateNameParts(lName);<\/code><\/div>\n<div class=\"line number32 index31 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">this<\/code><code class=\"java plain\">.firstName = fName;<\/code><\/div>\n<div class=\"line number33 index32 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">this<\/code><code class=\"java plain\">.lastName = lName;<\/code><\/div>\n<div class=\"line number34 index33 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number35 index34 alt2\"><\/div>\n<div class=\"line number36 index35 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">public<\/code> <code class=\"java plain\">SerializableClass deepCopy() <\/code><code class=\"java keyword\">throws<\/code> <code class=\"java plain\">Exception<\/code><\/div>\n<div class=\"line number37 index36 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number38 index37 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/\/Serialization of object<\/code><\/div>\n<div class=\"line number39 index38 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">ByteArrayOutputStream bos = <\/code><code class=\"java keyword\">new<\/code> <code class=\"java plain\">ByteArrayOutputStream();<\/code><\/div>\n<div class=\"line number40 index39 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">ObjectOutputStream out = <\/code><code class=\"java keyword\">new<\/code> <code class=\"java plain\">ObjectOutputStream(bos);<\/code><\/div>\n<div class=\"line number41 index40 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">out.writeObject(<\/code><code class=\"java keyword\">this<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number42 index41 alt1\"><\/div>\n<div class=\"line number43 index42 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/\/De-serialization of object<\/code><\/div>\n<div class=\"line number44 index43 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">ByteArrayInputStream bis = <\/code><code class=\"java keyword\">new<\/code>\u00a0\u00a0 <code class=\"java plain\">ByteArrayInputStream(bos.toByteArray());<\/code><\/div>\n<div class=\"line number45 index44 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">ObjectInputStream in = <\/code><code class=\"java keyword\">new<\/code> <code class=\"java plain\">ObjectInputStream(bis);<\/code><\/div>\n<div class=\"line number46 index45 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">SerializableClass copied = (SerializableClass) in.readObject();<\/code><\/div>\n<div class=\"line number47 index46 alt2\"><\/div>\n<div class=\"line number48 index47 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/\/Verify that object is not corrupt<\/code><\/div>\n<div class=\"line number49 index48 alt2\"><\/div>\n<div class=\"line number50 index49 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/\/validateNameParts(fName);<\/code><\/div>\n<div class=\"line number51 index50 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/\/validateNameParts(lName);<\/code><\/div>\n<div class=\"line number52 index51 alt1\"><\/div>\n<div class=\"line number53 index52 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">return<\/code> <code class=\"java plain\">copied;<\/code><\/div>\n<div class=\"line number54 index53 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number55 index54 alt2\"><\/div>\n<div class=\"line number56 index55 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">public<\/code> <code class=\"java plain\">String getFirstName() {<\/code><\/div>\n<div class=\"line number57 index56 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">return<\/code> <code class=\"java plain\">firstName;<\/code><\/div>\n<div class=\"line number58 index57 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number59 index58 alt2\"><\/div>\n<div class=\"line number60 index59 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">void<\/code> <code class=\"java plain\">setFirstName(String firstName) {<\/code><\/div>\n<div class=\"line number61 index60 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">this<\/code><code class=\"java plain\">.firstName = firstName;<\/code><\/div>\n<div class=\"line number62 index61 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number63 index62 alt2\"><\/div>\n<div class=\"line number64 index63 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">public<\/code> <code class=\"java plain\">String getLastName() {<\/code><\/div>\n<div class=\"line number65 index64 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">return<\/code> <code class=\"java plain\">lastName;<\/code><\/div>\n<div class=\"line number66 index65 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number67 index66 alt2\"><\/div>\n<div class=\"line number68 index67 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">void<\/code> <code class=\"java plain\">setLastName(String lastName) {<\/code><\/div>\n<div class=\"line number69 index68 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">this<\/code><code class=\"java plain\">.lastName = lastName;<\/code><\/div>\n<div class=\"line number70 index69 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number71 index70 alt2\"><\/div>\n<div class=\"line number72 index71 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java color1\">@Override<\/code><\/div>\n<div class=\"line number73 index72 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">public<\/code> <code class=\"java plain\">String toString() {<\/code><\/div>\n<div class=\"line number74 index73 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">return<\/code> <code class=\"java keyword\">new<\/code> <code class=\"java plain\">StringBuilder().append(getFirstName()+<\/code><code class=\"java string\">\",\"<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number75 index74 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">.append(getLastName()+<\/code><code class=\"java string\">\",\"<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number76 index75 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">.append(permissions)<\/code><\/div>\n<div class=\"line number77 index76 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">.toString();<\/code><\/div>\n<div class=\"line number78 index77 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number79 index78 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: center;\"><strong><a href=\"https:\/\/bit.ly\/3ELmCiA\" target=\"_blank\" rel=\"noopener\">Grab the opportunity to learn Python with Entri! Click Here<\/a><\/strong><\/p>\n<p><a href=\"https:\/\/entri.sng.link\/Bcofz\/uu8c\/w409\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-25520910 size-full\" src=\"https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/04\/Python-and-Machine-Learning-Square.png\" alt=\"Python and Machine Learning Square\" width=\"345\" height=\"345\" srcset=\"https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/04\/Python-and-Machine-Learning-Square.png 345w, https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/04\/Python-and-Machine-Learning-Square-300x300.png 300w, https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/04\/Python-and-Machine-Learning-Square-150x150.png 150w, https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/04\/Python-and-Machine-Learning-Square-24x24.png 24w, https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/04\/Python-and-Machine-Learning-Square-48x48.png 48w, https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/04\/Python-and-Machine-Learning-Square-96x96.png 96w, https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/04\/Python-and-Machine-Learning-Square-75x75.png 75w\" sizes=\"auto, (max-width: 345px) 100vw, 345px\" \/><\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Cloning means creating a copy of the original object. Its dictionary meaning is: \u201cmake an identical copy of\u201c. By default,\u00a0Java cloning is \u2018field by field copy\u2019\u00a0because the Object class does not have any idea about the structure of the class on which the\u00a0clone()\u00a0method will be invoked. So, JVM when called for cloning, does the following [&hellip;]<\/p>\n","protected":false},"author":111,"featured_media":25528008,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[802,1882],"tags":[],"class_list":["post-25527784","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articles","category-java-programming"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>What is Cloning in Java and its Types? - Entri Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What is Cloning in Java and its Types? - Entri Blog\" \/>\n<meta property=\"og:description\" content=\"Cloning means creating a copy of the original object. Its dictionary meaning is: \u201cmake an identical copy of\u201c. By default,\u00a0Java cloning is \u2018field by field copy\u2019\u00a0because the Object class does not have any idea about the structure of the class on which the\u00a0clone()\u00a0method will be invoked. So, JVM when called for cloning, does the following [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/\" \/>\n<meta property=\"og:site_name\" content=\"Entri Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/entri.me\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-11T12:57:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-23T09:59:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/06\/What-is-Cloning-in-Java-and-its-Types.png\" \/>\n\t<meta property=\"og:image:width\" content=\"820\" \/>\n\t<meta property=\"og:image:height\" content=\"615\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Feeba Mahin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@entri_app\" \/>\n<meta name=\"twitter:site\" content=\"@entri_app\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Feeba Mahin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/\"},\"author\":{\"name\":\"Feeba Mahin\",\"@id\":\"https:\/\/entri.app\/blog\/#\/schema\/person\/f036dab84abae3dcc9390a1110d95d36\"},\"headline\":\"What is Cloning in Java and its Types?\",\"datePublished\":\"2022-06-11T12:57:32+00:00\",\"dateModified\":\"2022-11-23T09:59:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/\"},\"wordCount\":1177,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/entri.app\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/06\/What-is-Cloning-in-Java-and-its-Types.png\",\"articleSection\":[\"Articles\",\"Java Programming\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/\",\"url\":\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/\",\"name\":\"What is Cloning in Java and its Types? - Entri Blog\",\"isPartOf\":{\"@id\":\"https:\/\/entri.app\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/06\/What-is-Cloning-in-Java-and-its-Types.png\",\"datePublished\":\"2022-06-11T12:57:32+00:00\",\"dateModified\":\"2022-11-23T09:59:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#primaryimage\",\"url\":\"https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/06\/What-is-Cloning-in-Java-and-its-Types.png\",\"contentUrl\":\"https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/06\/What-is-Cloning-in-Java-and-its-Types.png\",\"width\":820,\"height\":615,\"caption\":\"What is Cloning in Java and its Types\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/entri.app\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Entri Skilling\",\"item\":\"https:\/\/entri.app\/blog\/category\/entri-skilling\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Java Programming\",\"item\":\"https:\/\/entri.app\/blog\/category\/entri-skilling\/java-programming\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"What is Cloning in Java and its Types?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/entri.app\/blog\/#website\",\"url\":\"https:\/\/entri.app\/blog\/\",\"name\":\"Entri Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/entri.app\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/entri.app\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/entri.app\/blog\/#organization\",\"name\":\"Entri App\",\"url\":\"https:\/\/entri.app\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/entri.app\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/entri.app\/blog\/wp-content\/uploads\/2019\/10\/Entri-Logo-1.png\",\"contentUrl\":\"https:\/\/entri.app\/blog\/wp-content\/uploads\/2019\/10\/Entri-Logo-1.png\",\"width\":989,\"height\":446,\"caption\":\"Entri App\"},\"image\":{\"@id\":\"https:\/\/entri.app\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/entri.me\/\",\"https:\/\/x.com\/entri_app\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/entri.app\/blog\/#\/schema\/person\/f036dab84abae3dcc9390a1110d95d36\",\"name\":\"Feeba Mahin\",\"url\":\"https:\/\/entri.app\/blog\/author\/feeba123\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"What is Cloning in Java and its Types? - Entri Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/","og_locale":"en_US","og_type":"article","og_title":"What is Cloning in Java and its Types? - Entri Blog","og_description":"Cloning means creating a copy of the original object. Its dictionary meaning is: \u201cmake an identical copy of\u201c. By default,\u00a0Java cloning is \u2018field by field copy\u2019\u00a0because the Object class does not have any idea about the structure of the class on which the\u00a0clone()\u00a0method will be invoked. So, JVM when called for cloning, does the following [&hellip;]","og_url":"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/","og_site_name":"Entri Blog","article_publisher":"https:\/\/www.facebook.com\/entri.me\/","article_published_time":"2022-06-11T12:57:32+00:00","article_modified_time":"2022-11-23T09:59:00+00:00","og_image":[{"width":820,"height":615,"url":"https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/06\/What-is-Cloning-in-Java-and-its-Types.png","type":"image\/png"}],"author":"Feeba Mahin","twitter_card":"summary_large_image","twitter_creator":"@entri_app","twitter_site":"@entri_app","twitter_misc":{"Written by":"Feeba Mahin","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#article","isPartOf":{"@id":"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/"},"author":{"name":"Feeba Mahin","@id":"https:\/\/entri.app\/blog\/#\/schema\/person\/f036dab84abae3dcc9390a1110d95d36"},"headline":"What is Cloning in Java and its Types?","datePublished":"2022-06-11T12:57:32+00:00","dateModified":"2022-11-23T09:59:00+00:00","mainEntityOfPage":{"@id":"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/"},"wordCount":1177,"commentCount":0,"publisher":{"@id":"https:\/\/entri.app\/blog\/#organization"},"image":{"@id":"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#primaryimage"},"thumbnailUrl":"https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/06\/What-is-Cloning-in-Java-and-its-Types.png","articleSection":["Articles","Java Programming"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/","url":"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/","name":"What is Cloning in Java and its Types? - Entri Blog","isPartOf":{"@id":"https:\/\/entri.app\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#primaryimage"},"image":{"@id":"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#primaryimage"},"thumbnailUrl":"https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/06\/What-is-Cloning-in-Java-and-its-Types.png","datePublished":"2022-06-11T12:57:32+00:00","dateModified":"2022-11-23T09:59:00+00:00","breadcrumb":{"@id":"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#primaryimage","url":"https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/06\/What-is-Cloning-in-Java-and-its-Types.png","contentUrl":"https:\/\/entri.app\/blog\/wp-content\/uploads\/2022\/06\/What-is-Cloning-in-Java-and-its-Types.png","width":820,"height":615,"caption":"What is Cloning in Java and its Types"},{"@type":"BreadcrumbList","@id":"https:\/\/entri.app\/blog\/what-is-cloning-in-java-and-its-types\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/entri.app\/blog\/"},{"@type":"ListItem","position":2,"name":"Entri Skilling","item":"https:\/\/entri.app\/blog\/category\/entri-skilling\/"},{"@type":"ListItem","position":3,"name":"Java Programming","item":"https:\/\/entri.app\/blog\/category\/entri-skilling\/java-programming\/"},{"@type":"ListItem","position":4,"name":"What is Cloning in Java and its Types?"}]},{"@type":"WebSite","@id":"https:\/\/entri.app\/blog\/#website","url":"https:\/\/entri.app\/blog\/","name":"Entri Blog","description":"","publisher":{"@id":"https:\/\/entri.app\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/entri.app\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/entri.app\/blog\/#organization","name":"Entri App","url":"https:\/\/entri.app\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/entri.app\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/entri.app\/blog\/wp-content\/uploads\/2019\/10\/Entri-Logo-1.png","contentUrl":"https:\/\/entri.app\/blog\/wp-content\/uploads\/2019\/10\/Entri-Logo-1.png","width":989,"height":446,"caption":"Entri App"},"image":{"@id":"https:\/\/entri.app\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/entri.me\/","https:\/\/x.com\/entri_app"]},{"@type":"Person","@id":"https:\/\/entri.app\/blog\/#\/schema\/person\/f036dab84abae3dcc9390a1110d95d36","name":"Feeba Mahin","url":"https:\/\/entri.app\/blog\/author\/feeba123\/"}]}},"_links":{"self":[{"href":"https:\/\/entri.app\/blog\/wp-json\/wp\/v2\/posts\/25527784","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/entri.app\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/entri.app\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/entri.app\/blog\/wp-json\/wp\/v2\/users\/111"}],"replies":[{"embeddable":true,"href":"https:\/\/entri.app\/blog\/wp-json\/wp\/v2\/comments?post=25527784"}],"version-history":[{"count":9,"href":"https:\/\/entri.app\/blog\/wp-json\/wp\/v2\/posts\/25527784\/revisions"}],"predecessor-version":[{"id":25548032,"href":"https:\/\/entri.app\/blog\/wp-json\/wp\/v2\/posts\/25527784\/revisions\/25548032"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/entri.app\/blog\/wp-json\/wp\/v2\/media\/25528008"}],"wp:attachment":[{"href":"https:\/\/entri.app\/blog\/wp-json\/wp\/v2\/media?parent=25527784"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/entri.app\/blog\/wp-json\/wp\/v2\/categories?post=25527784"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/entri.app\/blog\/wp-json\/wp\/v2\/tags?post=25527784"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}