Log in

View Full Version : ใน java ตัวแปร String ไม่ได้ pass by reference



ChokBa
02-04-2008, 06:21 PM
ในเรื่องของ OOP หลายคนอาจจะคิดว่าตัวแปร String นั้น

จะส่งค่าตัวแปร หรือ parameter passing แบบ pass by reference

เพราะตัวแปร String นั้น ถือเป็นตัวแปร reference เช่นเดียวกับ array

แต่ในความเป็นจริงแล้วตัวแปร String นั้น pass by value ครับ

==ตัวอย่าง==


class Str {

public static void main(String[] args) {
String x = "Chok";
AddString(x);
System.out.println("x in main : " + x);
}//end main

static void AddString(String x) {
x += "Ba";
System.out.println("x in methode : " + x);
}//end AddString

}//end class

[/b]

== ผลจาการ run ==


x in methode : ChokBa
x in main : Chok
[/b]

จะเห็นว่าผลที่ออกมาค่า x ใน main นั้นไม่ได้มีการเปลี่ยนแปลงตามที่ถูกเปลี่ยนแปลงใน method

ดังความหมายของการ pass by reference แต่กลับมีลักษณะเดียวกับ การ pass by value

ด้วยเหตุผลกลใดผมก็ไม่ทราบเช่นเคย :lol: แต่เมื่อพบเจอ ก็อยากจะบอกกล่าวเพื่อ ให้รู้ทั่วๆกัน

ปล. สำหรับคนที่ไม่รู้จะ อธิบาย pass by value และ pass by reference แบบสั้นๆและภาษาของผมเอง (ผิดพลาดขออภัย)

pass by value : การส่งค่าระหว่า method ที่ไม่มีการอ้างอิง หรือ การเปลี่ยนแปลงของค่าใน methode ที่รับค่า
ไม่มีผลกับค่าที่ส่งไปนั้น เปรียบดังเป็นตัวแปรคนละตัวกัน (ใช้กับ String และ Premetive data type)

pass by reference : การส่งค่าระหว่าง method ที่มีการอ้างอิงค่าจากตัวแปรเดิม การเปลี่ยนแปลงค่าของตัวแปรใน methode
ที่รับค่านั้นมีผลกับตัวแปรที่ส่งไป เปรียบดังเป็นตัวแปรเดียวกัน (ใช้กับ array , Object)

ถ้าท่านใดยังสงสัยอีก ว่างๆจะทำ ตัวอย่าง มาให้ดูครับ