There I find a twist in the enhanced for loop
and immutable nature. Where it does not change the data in an array of
primitives, here I can see a clear variation.
Here is a Person class.
package test;
public class Person {
private int pId;
private String name;
private int pId;
private String name;
public Person(int pId, String name) {
this.pId = pId;
this.name = name;
}
public String toString(){
return "Id : "+pId+" Name : "+name;
}
public int getpId() {
return pId;
}
this.pId = pId;
this.name = name;
}
public String toString(){
return "Id : "+pId+" Name : "+name;
}
public int getpId() {
return pId;
}
public
void setpId(int pId) {
this.pId = pId;
}
this.pId = pId;
}
public
String getName() {
return name;
}
return name;
}
public void
setName(String name) {
this.name = name;
}
}
this.name = name;
}
}
And here is a tester
class with enhanced for loop.
package test;
import static
java.lang.Math.random;
import java.util.ArrayList;
import java.util.List;
import java.util.ArrayList;
import java.util.List;
public class PersonList {
public static void main(String[] args) {
List<Person> pList = new ArrayList<>();
pList.add( new Person(101,"John"));
pList.add( new Person(102,"James"));
pList.add( new Person(103,"Dan"));
pList.add( new Person(104,"Mathew"));
pList.add( new Person(105,"Sam"));
System.out.println("Added List elements : "+pList);
/* To perfomr element wise operation */
for(Person p : pList){
System.out.println(p);
}
/* you try to modify the data in pList through enhanced for loop */
System.out.println("List elements now : ");
for(Person p : pList){
if(p.getName().equals("Sam"))
p.setName("Samuel");
}
public static void main(String[] args) {
List<Person> pList = new ArrayList<>();
pList.add( new Person(101,"John"));
pList.add( new Person(102,"James"));
pList.add( new Person(103,"Dan"));
pList.add( new Person(104,"Mathew"));
pList.add( new Person(105,"Sam"));
System.out.println("Added List elements : "+pList);
/* To perfomr element wise operation */
for(Person p : pList){
System.out.println(p);
}
/* you try to modify the data in pList through enhanced for loop */
System.out.println("List elements now : ");
for(Person p : pList){
if(p.getName().equals("Sam"))
p.setName("Samuel");
}
/* OOPs... it has not
changed...But let us conform it once again by using enhanced for loop */
System.out.println("After Updation : view element in the
list : ");
for(Person p : pList){
System.out.println(p);
}
}
}
for(Person p : pList){
System.out.println(p);
}
}
}
When I run this I see
something different.
Added List elements :
[Id : 101 Name : John, Id : 102 Name : James, Id : 103 Name : Dan, Id : 104
Name : Mathew, Id : 105 Name : Sam]
Id : 101 Name : John
Id : 102 Name : James
Id : 103 Name : Dan
Id : 104 Name : Mathew
Id : 105 Name : Sam
List elements now :
After Updation : view element in the list :
Id : 101 Name : John
Id : 102 Name : James
Id : 103 Name : Dan
Id : 104 Name : Mathew
Id : 105 Name : Samuel
Id : 101 Name : John
Id : 102 Name : James
Id : 103 Name : Dan
Id : 104 Name : Mathew
Id : 105 Name : Sam
List elements now :
After Updation : view element in the list :
Id : 101 Name : John
Id : 102 Name : James
Id : 103 Name : Dan
Id : 104 Name : Mathew
Id : 105 Name : Samuel
Now the question is why
the name gets changed from within the enhanced for loop. Now in previous post x
reads data from ArrayList, and value change in x does not reflect in ArrayList.
But in current example, p holds the reference to an object and using reference,
it change the value. Rest is left to your imagination... :) !!!
No comments:
Post a Comment