programming පට්ටටම දන්නා අය එන්න
ජාවා වල විතරක් නෙමෙයි ගොඩක් languages වල method වලට parameters pass කරද්දී variable වලට reference එක පාස් කරනේ නැනේ .
Value එක විතරයි නේ පාස් කරන්නේ. එත් මචං මට පොඩි අවුලක් තියෙනවා. පල්ලෙහා තියෙන එක බලපන්. එකේ main method එකේදී Object කියල class එකේ instance එකක් හදලා DoThings කියල class එකට යවනවා. එතකොට යන්න ඕනේ actual instance වෙනුවට තියෙන instance එකේ copy එකක් නේ. එතකොට වෙන්න ඕනේ DoThing class එකේදී යවන instance එකේ variable එක වෙනස් (100) කරලා print කරනවා. එතකොට වෙනස් කරපු value එක ප්රින්ට් වෙනවා එක හරි. එත් දැන් main එකේදී තියෙන instance එකේ value එක display කරාම print වෙන්න ඕනේ 10 යි කියලා. මොකද default value එක 10 තියෙන්නේ. අනික method එකට pass කරන්නේ actual object එක නෙමෙයි. එක නිසා method එකේදී මොනවා කරත් main එකේ තියෙන object එකට අදාලා නෑනේ.
එත වෙන්නේ අනික් පැත්ත main එකේ තියෙන object එකත් වෙනස් වෙනවා.
එත මේක primitive data type වල නම් main එකේ තියෙන variable එක වෙනස් වෙන්නේ නෑ. ඒ කියන්නේ primitive data type වලදී යවන්නේ actual variable එක නෙමෙයි. නමුත් instance වලදී යවන්නේ actual එකද.
මේක හෙන අවුල් බන්.
ජාවා වල විතරක් නෙමෙයි ගොඩක් languages වල method වලට parameters pass කරද්දී variable වලට reference එක පාස් කරනේ නැනේ .
Value එක විතරයි නේ පාස් කරන්නේ. එත් මචං මට පොඩි අවුලක් තියෙනවා. පල්ලෙහා තියෙන එක බලපන්. එකේ main method එකේදී Object කියල class එකේ instance එකක් හදලා DoThings කියල class එකට යවනවා. එතකොට යන්න ඕනේ actual instance වෙනුවට තියෙන instance එකේ copy එකක් නේ. එතකොට වෙන්න ඕනේ DoThing class එකේදී යවන instance එකේ variable එක වෙනස් (100) කරලා print කරනවා. එතකොට වෙනස් කරපු value එක ප්රින්ට් වෙනවා එක හරි. එත් දැන් main එකේදී තියෙන instance එකේ value එක display කරාම print වෙන්න ඕනේ 10 යි කියලා. මොකද default value එක 10 තියෙන්නේ. අනික method එකට pass කරන්නේ actual object එක නෙමෙයි. එක නිසා method එකේදී මොනවා කරත් main එකේ තියෙන object එකට අදාලා නෑනේ.
එත වෙන්නේ අනික් පැත්ත main එකේ තියෙන object එකත් වෙනස් වෙනවා.
එත මේක primitive data type වල නම් main එකේ තියෙන variable එක වෙනස් වෙන්නේ නෑ. ඒ කියන්නේ primitive data type වලදී යවන්නේ actual variable එක නෙමෙයි. නමුත් instance වලදී යවන්නේ actual එකද.
මේක හෙන අවුල් බන්.
Code:
public class Main {
public static void main(String[] args) {
Object obj = new Object();
new DoThing(obj); // send instance to dothing class
obj.display(); // print current value . this must be 10
}
}
Code:
class DoThing {
public DoThing(Object object) {
object.setVALUE(100); // set value to 100
object.display(); // print it
}
}
Code:
class Object {
private int VALUE = 10;
public void display() {
System.out.println(VALUE);
}
public void setVALUE(int a) {
VALUE = a;
}
public int getVALUE() {
return VALUE;
}
}


