הצעה
ראשית, נבהיר שני דברים: 1. בג´אווה, טיפוסים בסיסיים כמו int, double, char וכו´, מועברים ע"י הערך, by value כמו שאומרים, ואין דרך אחרת. היות וג´אווה לא תומכת במצביעים אלא רק ברפרנסים, אי אפשר להעביר מצביע לשלם ולשנות את המספר בתוך פונקציה. 2. בג´אווה, אובייקטים (כל דבר מעבר לטיפוס בסיסי) מועברים בצורה אחרת. למעשה, הרפרנס שלהם מועבר, בדיוק כמו העברת רפרנס ב-CPP. לכן בג´אווה אפשר לשנות אובייקט אם הועבר לפונקציה, וגם אפשר להחזיר אובייקט או אובייקט שמייצג מערך של אובייקטים לפונקציה הקוראת. ועכשיו, דרך לבצע את מה שביקשת (למרות שקשה לי לראות מצב שבו צריך את זה): העיקרון הוא שאם ממש צריכים לשנות את המשתנה המועבר (ושוב, עוד לא יצא לי שאני צריך דבר כזה, ואני כותב מספיק זמן בג´אווה), אפשר במקום לעבוד עם מחלקה שנקראת Integer. כן זה קצת מרגיז שצריך לעבוד עם אובייקט במקום לעבוד עם טיפוס בסיסי, אבל זו הדרך היחידה לבצע את הדבר הזה.. דוגמא:
public Integer sqr( Integer num) { // calculate num*num int n = num.intValue(); n *= n; return new Integer( n); }
והקוד הקורא לפונקציה:
Integer nNum; nNum = new Integer( 5); nNum = sqr( nNum); System.out.println( "Square is: " + nNum.toString());
כן, שיטה מעצבנת, אני מודה. אין חלופה טובה באמת, אבל בינינו, גם אין צורך לאחת כזו... אני עוד לא נתקלתי במצב כזה..