Hi,
eine Welt bricht zusammen.
Es gibt zwei Möglichkeiten:
1.
Ich hab es falsch verstanden.
2.
Entweder die FAQ oder der Java-Compiler lügt.
In der FAQ steht:
Diese Meinung habe ich bis heute vehement vertreten und musste mich selbst, nach fast 3 stündigen Diskussionen darüber, mit meinem eigenen Beispiel vom Gegenteil überzeugen.
Ich habe auch den entsprechenden FAQ - Beitrag ausgedruckt und meinen Mitstudenten vorgelegt.
Aber seht selbst:
Ich habe eine Datenklasse mit zwei Strings. Die vertausche ich in der Klasse "Name" (stellt Controlebene dar) mithilfe der Klasse Tausch. Das Ergebnis ist, dass die Strings vertauscht sind.
Das Beispiel ist in der FAQ mit der Klasse "Integer". Was ja quasi dasselbe in grün ist.
Mein Lehrer sagt, dass bei Objekten per "Call by Referenz" übergeben wird.
Was stimmt denn nun?
greetz
SLi
eine Welt bricht zusammen.
Es gibt zwei Möglichkeiten:
1.
Ich hab es falsch verstanden.
2.
Entweder die FAQ oder der Java-Compiler lügt.
In der FAQ steht:
Java kennt kein "Call by Reference" !
Dies erkennt man wenn man sich die genaue Definitionen der beiden Aussagen betrachtet:
Zitat:
call by value
When you call a method, the method sees a copy of any primitives past to it. Thus any changes it makes to those values have no effect on the caller's variables. This also applies to references passed as parameters. The caller cannot change the caller's reference variables, but it can change the fields in the caller's objects they point to.
Zitat:
call by reference
When you call a method by reference, the callee sees the caller's original variables passed as parameters, not copies. References to the callee's objects are treated the same way. Thus any changes the callee makes to the caller's variables affect the caller's original variables. Java never uses call by reference. It always uses call by value.
Diese Meinung habe ich bis heute vehement vertreten und musste mich selbst, nach fast 3 stündigen Diskussionen darüber, mit meinem eigenen Beispiel vom Gegenteil überzeugen.
Ich habe auch den entsprechenden FAQ - Beitrag ausgedruckt und meinen Mitstudenten vorgelegt.
Aber seht selbst:
Code:
public class CallByReference
{
public static void main(String[] args)
{
Daten d = new Daten();
new Name(d);
}
}
class Name
{
public Name(Daten d)
{
System.out.println("Vorm Tausch: i=" + d.name + " j=" + d.name2);
Tausch t = new Tausch(d);
System.out.println("Nach Tausch: i=" + d.name + " j=" + d.name2);
}
}
class Tausch
{
public Tausch(Daten n)
{
String tmp = n.name;
n.name = n.name2;
n.name2 = tmp;
}
}
class Daten
{
String name;
String name2;
public Daten()
{
name = "Maik";
name2 = "Hartmut";
}
}
Ich habe eine Datenklasse mit zwei Strings. Die vertausche ich in der Klasse "Name" (stellt Controlebene dar) mithilfe der Klasse Tausch. Das Ergebnis ist, dass die Strings vertauscht sind.
Das Beispiel ist in der FAQ mit der Klasse "Integer". Was ja quasi dasselbe in grün ist.
Mein Lehrer sagt, dass bei Objekten per "Call by Referenz" übergeben wird.
Was stimmt denn nun?
greetz
SLi