Mutable and Immutable



import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test2{

public static void main(String[] args) {

List<Mutbl> imlist1 = new ArrayList<Mutbl>();
List<Mutbl> imlist2 = new ArrayList<Mutbl>();

// immuatble

System.out.println("------------------IMMUTABLE EXAMPLE-----------------------");
Mutbl imm1 = new Mutbl("P1", "S1");
Mutbl imm2 = new Mutbl("P2", "S2");

imlist1.add(imm1);
imlist1.add(imm2);

System.out.println(Arrays.toString(imlist1.toArray()));
imm1.setP1("PP1");
imm1.setP2("SS1");
imm2.setP1("PP2");
imm2.setP2("SS2");

imlist2.add(imm1);
imlist2.add(imm2);

System.out.println(Arrays.toString(imlist2.toArray()));

System.out.println("value of list 1 changes indirectly due to immutabality");
System.out.println(Arrays.toString(imlist1.toArray()));

System.out.println("------------------------------MUTABLE EXAMPLE----------------------------------");
// mutable
Mutbl m1 = new Mutbl("P1", "S1");
Mutbl m2 = new Mutbl("P2", "S2");

List<Mutbl> list1 = new ArrayList<Mutbl>();
List<Mutbl> list2 = new ArrayList<Mutbl>();
list1.add(m1);
list1.add(m2);

System.out.println(Arrays.toString(list1.toArray()));

m1 = new Mutbl("PP1", "SS1");
m2 = new Mutbl("PP2", "SS2");

list2.add(m1);
list2.add(m2);


System.out.println(Arrays.toString(list2.toArray()));

System.out.println("value of list 1 remains same");
System.out.println(Arrays.toString(list1.toArray()));
}

}

final class Mutbl{
private String p1;
private String p2;

public Mutbl(String p1,String p2){
this.p1 = p1;
this.p2 = p2;
}

public String getP1() {
return p1;
}
public String getP2() {
return p2;
}
public void setP1(String p1) {
this.p1 = p1;
}
public void setP2(String p2) {
this.p2 = p2;
}

@Override
public String toString() {
return "[p1=" + p1 + ", p2=" + p2 + "]";
}


}

Comments