Meinst Du parameterübergabe innerhalb von Funktionen oder meinst Du Parameterübergabemöglichkeiten von außen an ein Programm?
Ich erzähle mal was zum ersten Fall...
Parameter, auch Argumente genannt, werden von Java by value übertragen, zumindest gilt dies für die primitiv typen (int, double ...). Das bedeutet der Aufrufer bekommt selbst wenn die Mehtode diesen Parameter einen anderen Wert zu weisen sollte den übergebenen Wert zurück.
Objekte werden "by reference" übertragen wobei diese Refferenz innerhalb der Methode nicht änderbar sind. String z.B. ist ein Objekt, wird also eigetnlich per Referenz übertragen aber String hat eine besondere Bedeutung, da der Inhalt eines Strings eigetnlich nicht änderbar ist. Bei Integer und Double etc. sind ebenfalls Objekte aber eigetnlich auch nicht änderbar, da ihnen eine "setWert()" Mehtode fehlt. Du kannst es ja mal ausprobieren eine Methode als Argument eine wie auch immer geartete Number mitzugeben und diese dann versuchen innerhalb der Methode zu ändern. Du wirst außerhalb der mehtode wieder den übergebenen Wert zurück erhalten, genauso sollte es meines Wissens auch mit String sein.
Wenn man also in Java einzelne Numbers (Double, Integer, BigDecimal ...) als Ausgabeparameter haben will, ohne dafür den Returnwert verwenden zu wollen muss man ein -ich nenne es mal Vehicle - Object verwenden, welches das Zahlenobjekt aufnimmt und man dann innerhalb der aufgerufenen Mehtode wieder mit einem anderen Zahlenobjekt überschreibt. (In den meisten Assembler-Sprachen würde man dazu vermutlich doppelt indirekte Adressierung sagen)
Kleiner Excurs:
Im Gegenstück dazu gibt die Sprache PL1 die geänderten Werte default-mäßig wieder an den Aufrufer zurück, denn PL1 verwendet normalerweise ein "calling by reference", es sei denn man klammert das Argument beim Aufruf ein dann bedeutet es "calling by value".
Bei C und Pascal gibt es defaultmäßig ein "calling by value", möchte man in diesen Sprachen ein "calling by reference" so gibt man gewöhnlich einen Pointer mit.
Takidoso