Windowsprogramm mit C++ oder Java?



  • Zeus schrieb:

    Ich glaub den call-by-reference und value streit hatten wir schon.

    Ja. Und der ist gar nicht mal so lange her. Ich glaube mich auch erinnern zu koennen, dass keine Fraktion nachgegeben hat. Koennte also ein langer Thread werden.

    BTW: call-by-value 😉



  • Trotzdem behaupte ich dieses:

    package Wrapper;
    
    class IntObj{
    	public int i;
    }
    
    public class Wrapper {
    
    	public static void doit(IntObj i) {  // Call-by-Reference
    		i.i = 12;
    	}
    
    	public static void swap(int i, int j) { // Call-by-Value
    		int tmp = j;
    		j = i;
    		i = tmp;
    	}
    
    	public static void main(String[] args) {
    		IntObj j = new IntObj();
    		doit(j);
    
    		System.out.println(j.i);
    
    		int x = 5; int y = 9;
    		swap(x,y);
    		System.out.print(x);
    		System.out.print("\t");
    		System.out.print(y);
    
    	}
    
    }
    


  • es gibt darüber gar nix zu streiten. hier der entsprechende link zur java language specification: http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#37472 und hier nochmal erklärt für dumme, falls man die jls nicht versteht: http://javadude.com/articles/passbyvalue.htm

    dein beispiel, zeus, ist kein beispiel von call by reference.



  • Jo, ich weiss.

    Java-Handbuch schrieb:

    Wie in allen anderen Programmiersprachen entspricht die call by value-Übergabe eines Zeigers damit natürlich genau der Semantik von call by reference."



  • ich weiß zwar nicht aus welchem "java handbuch" du da zitierst, aber daran, dass es falsch ist ändert es auch nichts, sorry 😮



  • Guido Krüger
    Handbuch der Java-Programmierung
    4., aktualisierte Auflage 2006
    Addison-Wesley, 2006
    ISBN 3-8273-2361-4 bzw. 3-8273-2447-5

    Der Programmier will ja auch nur Ausdrücken ob er mit dem Orginalen arbeitet oder ne Kopie, ob da nun der Zeiger wirklich referenziert wird oder per Kopie übergeben wird, ist ja so ein schöner Streit zwischen "Anwendungsentwickler" und "Compilerbauen" ;o



  • Jetzt schreib mal ein swap() fuer nicht Build-Ins und revidiere deine Aussage.



  • Zeus schrieb:

    Der Programmier will ja auch nur Ausdrücken ob er mit dem Orginalen arbeitet oder ne Kopie, ob da nun der Zeiger wirklich referenziert wird oder per Kopie übergeben wird, ist ja so ein schöner Streit zwischen "Anwendungsentwickler" und "Compilerbauen" ;o

    nein ist es nicht. es ist nur so, dass die begriffe call-by-value und call-by-reference fest definiert sind und du nicht einfach deiner laune nach ihre bedeutungen ändern kannst: fertig.



  • zeus du hast doch recht ich hab mich fertan



  • Apollon schrieb:

    Jetzt schreib mal ein swap() fuer nicht Build-Ins und revidiere deine Aussage.

    Mit ist schon klar, dass du durch die "kopierten Referenzen" nix erreichen wirst.



  • Wenn das eine Referenz auf nen Pointer wäre, dann würde das gehen.

    package Wrapper;
    
    class IntObj{
    	public int i;
    }
    
    public class Wrapper {
    
    	public static void doit(IntObj i) {  
    		i = new IntObj();
    		i.i = 12;
    	}
    
    	public static void main(String[] args) {
    		IntObj j = null;
    		doit(j);
    
    		System.out.println(j.i);
    
    	}
    
    }
    


  • sososo schrieb:

    zeus du hast doch recht ich hab mich fertan

    das war übrigens nich ich 🙂



  • gehts noch ??

    dafür gibts seit ewigkeiten Integer



  • der von weiter oben schrieb:

    sososo schrieb:

    zeus du hast doch recht ich hab mich fertan

    das war übrigens nich ich 🙂

    das war übrigens nich ich 🙂



  • der von weiter oben schrieb:

    der von weiter oben schrieb:

    sososo schrieb:

    zeus du hast doch recht ich hab mich fertan

    das war übrigens nich ich 🙂

    das war übrigens nich ich 🙂

    das war übrigens nich ich 🙂



  • Der Clue ist doch, dass j übergeben wird und in java ist es so, das die Referenz auf das Objekt kopiert wird. Damit hassu eine Lokale kopie, die du änderst und nach verlassen der Methode vonn doit nicht mehr existiert.
    Aber Call-by-Value kann das auch nicht sein, weil ich doch über die Referenz die gleichen Objekte manipulieren kannst.



  • r0nny schrieb:

    gehts noch ??

    dafür gibts seit ewigkeiten Integer

    Integer is immutable. posten hier alle bevor sie denken?



  • hääää schrieb:

    r0nny schrieb:

    gehts noch ??

    dafür gibts seit ewigkeiten Integer

    Integer is immutable. posten hier alle bevor sie denken?

    hääää?



  • Apollon schrieb:

    Zeus schrieb:

    Ich glaub den call-by-reference und value streit hatten wir schon.

    Ja. Und der ist gar nicht mal so lange her. Ich glaube mich auch erinnern zu koennen, dass keine Fraktion nachgegeben hat. Koennte also ein langer Thread werden.

    BTW: call-by-value 😉

    Stimmt ! Und schon damals stellte sich ziemlich schnell raus, dass Javaisten den "call by value von Referenzen" als "call by value" und C++er den als "call by reference" bezeichnen.
    Für die Javaisten ist das auch einfacher, weil es damit nur eine Call-Art gibt - was der Tatsache Rechnung trägt, dass der Javaist sich das sowieso nicht aussuchen kann (er bekommt ja immer nur eine Referenz der einen primitiven Typen in de Hand).
    Gleichzeitig hat er es etwas schwerer, weil er eine Sonderregel für primitive Typen hat.

    Schon erstaunlich, wie lange man über sowas streiten kann.

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Schon erstaunlich, wie lange man über sowas streiten kann.

    Nein. Erstaunlich wie Du ueber sowas streiten kannst. 😉


Anmelden zum Antworten