העברת פרמטרים ב - reference

העברת פרמטרים ב - reference

יש אפשרות ב - Java להעביר פרמטרים לפונקציה by reference? כלומר, אם נניח אני קוראת לפונקציה על מנת שתאכלס לי פרמטרים: Populate(String a, String b) איך אני מגדירה את הפונקציה כך שהפרמטרים יוחזרו עם הערכים שלהם? אני בטוחה שאפשר, רק לא יודעת איך...
 
בג'אווה הם תמיד מועברים..

by reference. היחידים שמועברים by value הם טיפוסים פרימיטיביים (int, long, float, double וכו').
 
כן אבל...

אם יש לי את קטע הקוד הבא: String a = null; String b = null; populate(a, b); =============== private void populate(String x, String y) { x = "8"; y = "9"; } במקרה זה a ו - b לא יקבלו את הערכים שלהם כי אני כאילו מנסה לשנות את ה - ref שלהם. איך בכל זאת אני מוציאה תוכנית כזו לפועל?
 
אני חושב שהתבלבלת קצת ../images/Emo13.gif

המתודה populate מקבלת שני רפרנסים לשני אובייקטים מטיפוס String. ברגע שכתבת:
x="8"​
קבעת שמעתה והלאה המשתנה x הוא רפרנס לאובייקט חדש מטיפוס string המכיל את המחרוזת "8". האובייקט שהמשתנה x הצביע עליו קודם כבר לא מוצבע יותר על ידי x. במקרה של הקוד שלך המתודה populate כלל לא מקבלת רפרנסים לאובייקטים אלא מקבלת nulls. אז גם אם רצית להשפיע על האובייקטים שהיא מקבלת, היית חוטפת exception. הנה קטע קוד אלטרנטיבי:
String a = new String(); String b = new String(); populate(a,b); ... private void populate(String x, String y) { x.concat("8"); y.concat("9"); }​
האפקט של populate הפעם הוא שונה מהאפקט שאת רצית במקור (לקחת מחרוזת ולקבוע לה ערך חדש). במקרה הזה אם למחרוזות x,y לפני הקריאה למתודה היו ערכים אז התוים 8,9 פשוט יתווספו לסוף המחרוזת. אבל כאן פשוט רציתי להדגים רעיון - אני מפעיל פעולה concat על האובייקטים שקיבלתי רפרנס אליהם (האובייקטים האלה הם שתי מחרוזות ריקות שיצרתי מחוץ למתודה). וכאשר המתודה תסיים את פעולתה האובייקטים האלה ישונו בהתאם. על מנת לעבוד בצורה קצת יותר גמישה עם מחרוזות אני דוקא ממליץ על StringBuffer ולא על String.
 
תודה... ../images/Emo140.gif

זה בדיוק מה שעשיתי, עוד לפני שקראתי את תשובתך... פשוט עיינתי באיזה חוברת של design patterns וגיליתי את הסיפור הזה. גם שם ממליצים להשתמש ב - StringBuffer. בכל אופן, תודה!
 
בבקשה.

נ.ב. אני לא כתבתי את החוברת
 
למעלה