Portal > Foren > Java > Allgemeine Java-Programmierung > Clall by Reference...
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 10.10.2004, 21:45 Nach oben    #1
RooKee
Gast
 
Beiträge: n/a
Standard Clall by Reference...

Also ich habe ein Problem. Und zwar gibt es in Java ja nur Objekt, also sind Variablen auch Objekte und haben ihre Methoden. So müßte bei einem Funktionsaufruf, also auch die Referenz übergeben werden und mit dem Originalwert weitergearbeitet werden.. aber...

**********************************

int a = 1;

erhoehen(a);
System.out.println("Ausgabe: " + a);

private void erhoehen (int a)
{
a++;
}

**********************************

Eigentlich solte die Ausgabe 2 seien aber leider funktioniert das nicht. Warum nicht?

In C++ würde das mit dem AdressOperator (&amp gehen, aber leider gibts ja keine Pointer in Java...

Also hat einer ne idee???
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.10.2004, 23:27 Nach oben    #2
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 432
Standard

Hi,

erst einmal Willkommen hier im Forum. Weiter gibt es hier Code-Tags, welche Du bitte nutzen solltest, damit man den Code besser herauslesen kann.

Zu Deinem Problem: So geht das in Java leider nicht bzw. ist es nicht möglich. Du musst entweder mit Rückgabewerten arbeiten oder Du manitpulierst globale Variablen mit dem this-Operator
Code:
int a = 1;

private void erhoehen() {
    this.a++;
}

private void ausfuehrMethode() {
    erhoehen();
    System.out.println(a);
}
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.10.2004, 08:07 Nach oben    #3
RooKee
Gast
 
Beiträge: n/a
Standard

Also kann man nicht mit der Referenz einer Variable arbeiten bzw. mit dem Original???

Also ich könnte das ganze nur über ein Array oder andere Hilfsmittel lösen?
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.10.2004, 09:57 Nach oben    #4
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 432
Standard

Ich verstehe nicht, wie Du das über ein Array lösen möchtest. Prinzipiell geht es hier um die Sicherheit, dass man im Code nichts murksen kann. Wenn Du den richtigen Wert zurückgibst, machst Du das bewusst. Dieses & schiebt sich bei C++ ganz schnell mal mit ein.

Auserdem kannst Du in der Methode auf den globalen Variablen arbeiten, dann benötigst Du nur ein erhoehen() und erziehlst genau den Effekt.
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.10.2004, 00:04 Nach oben    #5
Densi
Gast
 
Beiträge: n/a
Standard Also...

Hi,

also in Java ist das so: Objekte werden immer als Referenz übergeben. Die einfachen Datentypen (int, char und auch String) werden allerdings als "value" übergeben!
Wenn du auch z.B. einen int als Referenz übergeben willst, packe diesen einfach in eine Dummy-Klasse.

Beispiel:

class MyInt
{
int i;

MyInt(int zahl)
{
i = zahl;
}
}

Im Programm sähe das dann so aus:
...
int i = 7;
MyInt iObj = new MyInt(i);
...
erhoehe(iObj);
...
public void erhoehe(MyInt o)
{
o.i++;
}
...

Gruß,
Daniel.
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.10.2004, 09:27 Nach oben    #6
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 432
Standard

Bitte setze in Deinen kommenden Beiträgen doch Java-Tags, damit man es lesen kann. Danke.
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.10.2004, 12:39 Nach oben    #7
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.133
Standard

Es gibt die Klasse Integer, die einen Wrapper für den int-Typ darstellt - erspart dir also die zusätzliche Klasse.
Ich weiß allerdings nicht, ob die auch nen Setter hat... guck einfach mal in der Doku (java.lang.Integer).
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.10.2004, 17:40 Nach oben    #8
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard Re: Also...

Zitat:
Zitat von Densi
Hi,

also in Java ist das so: Objekte werden immer als Referenz übergeben. Die einfachen Datentypen (int, char und auch String) werden allerdings als "value" übergeben!
String ist kein "einfacher Datentyp" sondern eine Klasse und ein String-Objekt verhält sich entsprechend auch wie alle anderen Objekte.
http://java.sun.com/j2se/1.5.0/docs/...ng/String.html
Das ist auch der Grund wieso du Strings (fast) immer nicht mit == vergleichen kannst.

Ausserdem eine Ergänzung: Für die "einfachen" Datentypen wie int und char gibts jeweils auch Wrapper-Klassen wie z.B. Integer und Character die dann jeweils auch wie alle anderen Objekte auch als Referenz übergeben werden.

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.10.2004, 20:45 Nach oben    #9
Densi
Gast
 
Beiträge: n/a
Standard Re: Also...

Zitat:
Zitat von peschmae
Zitat:
Zitat von Densi
Hi,

also in Java ist das so: Objekte werden immer als Referenz übergeben. Die einfachen Datentypen (int, char und auch String) werden allerdings als "value" übergeben!
String ist kein "einfacher Datentyp" sondern eine Klasse und ein String-Objekt verhält sich entsprechend auch wie alle anderen Objekte.
http://java.sun.com/j2se/1.5.0/docs/...ng/String.html
Das ist auch der Grund wieso du Strings (fast) immer nicht mit == vergleichen kannst.

Ausserdem eine Ergänzung: Für die "einfachen" Datentypen wie int und char gibts jeweils auch Wrapper-Klassen wie z.B. Integer und Character die dann jeweils auch wie alle anderen Objekte auch als Referenz übergeben werden.

MfG Peschmä
Jo. Das mit den Wrappern stimmt. Und das ein String im Prinzip ein Objekt der Klasse String ist, stimmt natürlich auch. Aber ein String wird dennoch als value übergeben!

Gruß,
Densi.
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.10.2004, 09:43 Nach oben    #10
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

Stimmt. Das ist wohl neu - als ich mit Java angefangen hab ging das 100%ig sicher nicht.

Ach so, nein, ganz so einfach ist das nicht. Hab mal nachgeguckt:
Java Code:
  1. public class test {
  2.         public static void main(String[] args) {
  3.                 String s1 = "hallo";
  4.                 String s2 = "hallo";
  5.  
  6.                 if (s1 == s2)
  7.                         System.out.println("Wir sind gleich");
  8.                 else
  9.                         System.out.println("Wir sind nicht gleich");
  10.         }
  11. }

ergibt: "Wir sind gleich" - weil es sich hier um Stringkonstanten handelt. Aber mit Strings, die Ergebnisse von Operationen wie + oder substring sind geht das nicht:
Java Code:
  1. public class test {
  2.         public static void main(String[] args) {
  3.                 String s1 = "hallo";
  4.                 String s2 = "hallo du da";
  5.                 System.out.println(s1+","+s2+","+s2.substring(0,5)+",");
  6.  
  7.                 if (s1 == s2.substring(0, 5))
  8.                         System.out.println("Wir sind gleich");
  9.                 else
  10.                         System.out.println("Wir sind nicht gleich");
  11.         }
  12. }

das ergibt "Wir sind nicht gleich". Hätten wir eine übergabe by-Value sollte das aber schon gleich sein (oder auch wenn Sun so schlau gewesen wäre und den == Operator entsprechend überladen hätte)

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.10.2004, 10:23 Nach oben    #11
Erfahrener Benutzer
 
Registriert seit: 16.11.2005
Beiträge: 242
Standard

Java Code:
  1. public class test {
  2.         public static void main(String[] args) {
  3.                 String s1 = "hallo";
  4.                 String s2 = "hallo du da";
  5.                 System.out.println(s1+","+s2+","+s2.substring(0,5)+",");
  6.  
  7.                 if (s1 == s2.substring(0, 5))
  8.                         System.out.println("Wir sind gleich");
  9.                 else
  10.                         System.out.println("Wir sind nicht gleich");
  11.         }
  12. }
müsste in deinem substring das nicht s2.substring(0,4) heißen?
nove ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.10.2004, 10:32 Nach oben    #12
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 432
Standard

Jupp,

ich bin mir ziemlich sicher, dass ich sowas in meinem jetzigen Projekt verwende.
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.10.2004, 22:26 Nach oben    #13
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

Zitat:
Zitat von nove
müsste in deinem substring das nicht s2.substring(0,4) heißen?
Nein. Die Numerierung ist so:
0 h 1 a 2 l 3 l 4 o 5
d.h. 0,0 wäre String mit Länge 0 - 0,1 wäre String mit Länge 1, etc

Abgesehen davon stimmt ja der Output:
Code:
peschmae@thinkpad:/tmp$ java test
hallo,hallo du da,hallo,
Wir sind nicht gleich
und mit 0, 4 ists
Code:
peschmae@thinkpad:/tmp$ java test
hallo,hallo du da,hall,
Wir sind nicht gleich
MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.10.2004, 06:23 Nach oben    #14
Erfahrener Benutzer
 
Registriert seit: 16.11.2005
Beiträge: 242
Standard

Sorry



nochmal compilen vergessen.

nove ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
call By Reference bei EJB alekz Enterprise Java 1 24.01.2005 22:50


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45