W tym temacie napisałem kiedyś odpowiedź na podobny problem:
http://4programmers.net/Forum/503371?h=Pointer#id503371
Masz tam gotowy kod klasy wskaźnika w Javie, a poniżej przykład przekazywania argumentu przez zmienną
package Testy;
import Olamagato.Pointer;
class Typ
{
public int val;
}
public class TestPointer
{
public static void main(String[] args)
{
Typ x = new Typ();
x.val = 100;
System.out.printf("x = %d\n", x.val);
zmien(new Pointer(x), +10); //utworzenie referencji/wskaźnika i podanie go jako argument
System.out.printf("x = %d\n", x.val);
}
public static void zmien(Pointer arg, int dx)
{
Object o = arg.get();
if(o instanceof Typ)
((Typ)o).val += dx;
else
System.out.println("Nieznany Typ wskaźnika");
}
}
/*
run:
x = 100
x = 110
*/
Oczywiście zamiast tworzyć w klasie Typ operacje get i set (lub assign) posłużyłem się polem publicznym.
Gdyby Java miała możliwość definiowania operatorów, to zapis nie różniłby się od użycia referencji w C/C++.
Wszystko sprowadza się po prostu do modyfikacji zmiennej x typu Typ za pomocą wywołania funkcji zmień i jej argumentu wskaźnikowego. Jak widać zmienna x nie została bezpośrednio nawet dotknięta, lecz jej wartość została zmodyfikowana.