// JavaProject CallDemo
Die Übergabe von Eingabeparametern funktioniert auf
unterschiedliche Weise. Dies wird anhand der überladenen Methode
setValue der Klasse Calls demonstriert.
Handelt es sich beim Aufruf einer zweiparametrigen Version dieser Methode bei dem ersten Parameter beispielsweise um eine primitive Variable (in diesem Projekt: die zum Konstruktor Calls() gehörende Variable i vom Typ int), um eine Referenz auf ein Wrapper-Objekt (in diesem Projekt: j vom Typ Integer) oder um eine Referenz auf ein String-Objekt (in diesem Projekt: l), so sind i bzw. die durch j und l referenzierten Objekte nach dem Aufruf der entsprechenden Version von setValue unverändert. Ist der erste Parameter dagegen eine Referenzvariable etwa vom Typ Int oder vom Typ JLabel, ist dies nicht der Fall.
// CallDemo.java
import javax.swing.*;
class Int {
int n;
Int(int n) {
setValue(n);
}
void setValue(int v) {
n = v;
}
int getValue() {
return n;
}
}
class Calls {
void setvalue(float x) {
x = 1f;
}
void setValue(int n, int v) { //
Überladen von Methoden
n = v;
System.out.print(n + ", ");
}
void setValue(Integer n, int v) {
n = v;
System.out.print(n + ", ");
}
void setValue(Int n, int v) {
n.setValue(v);
System.out.print(n.getValue() + ", ");
}
void setValue(String str, String v) {
str = new String(v);
System.out.print(str + ", ");
}
void setValue(JLabel lbl, String v) {
lbl.setText(v);
System.out.println(lbl.getText());
System.out.println();
}
void output(int a, Integer b, Int c, String d, JLabel e) {
String s = a + ", ";
s = s.concat(b + ", ");
s = s.concat(c.getValue() + ", ");
s = s.concat(d + ", ");
s = s.concat(e.getText());
System.out.println(s);
System.out.println();
}
Calls() {
float x = 0f;
System.out.println(x);
System.out.println();
setValue(x); //
call by value
System.out.println(x);
System.out.println();
int i = 3;
Integer j = Integer.decode("3");
Int k = new Int(3);
String l = "3";
JLabel m = new JLabel("3");
output(i, j, k, l, m);
setValue(i, 5); // call by value
setValue(j, 5); //
"call by value"
setValue(k, 5); // call by reference
setValue(l, "5"); //
"call by value"
setValue(m, "5"); // call by reference
output(i, j, k, l, m);
}
}
class CallDemo {
public static void main(String[] args) {
new Calls();
}
}
