Variablen Pointer Grundlagen

Status
Nicht offen für weitere Antworten.

Waluigi

Neues Mitglied
Ich bin grad von den c++ Inseln in Java angespült worden.
Ich hab gemerkt, das Java viel angenehmer zum Programmieren ist und auch viel mehr Support bietet.

Nur die ganze Pointer Geschicht verirrt mich total.
Un dbevor ich mich selbst verletzte, wollte ich fragen wie das funktioniert:

Wann wird eine Kopie erstellt, und wann wird eine Variable zum Pointer.

Kann eine Variable ein Pointer eines Pointers sein?

Und wie kann ich einer Klasse einen Verweis auf eine andere als Klassenattribut hinzufügen?

Ich hoffe ich hab das nicht komplett falsch verstanden.
 

TKausL

Top Contributor
Hallo.

Pointer gibt es in Java garnicht. Die Primitiven kannst du somit nur Call-By-Value übergeben. Die Objekte/Instanzen werden als Referenz gespeichert, d.h. als Call-By-Reference.
 

JCODA

Top Contributor
Hallo.

Pointer gibt es in Java garnicht. Die Primitiven kannst du somit nur Call-By-Value übergeben. Die Objekte/Instanzen werden als Referenz gespeichert, d.h. als Call-By-Reference.

Nö. Es gibt in Java nur Call-by-Value, wenn du ein Object übergibst wird die Referenz kopiert! Aber es ist kein Call-by-Ref.
 
1

123f3f 4tt

Gast
Ok, aber wie kann man eine Klasse kopieren und wie verlinken?
 

KSG9|sebastian

Top Contributor
Kopieren? Eine Klasse? Gar nicht..

Verlinken wäre wohl:

Auto auto = new Auto()

drive(auto)

puic void drive(Auto a) {
//drive...
}
 

langhaar!

Bekanntes Mitglied
Ok, aber wie kann man eine Klasse kopieren und wie verlinken?

Du meinst vermutlich, wie man ein Objekt kopieren kann?

Wenn du eine komplette Kopie möchtest, also jedes Attribut in Quelle und Ziel unabhängig voneinander sein soll,dann erstellt du eine neue Instanz und löst das Zielobjekt soweit rekursiv auf, bis nur noch primitive Datentypen vorhanden sind, die man übertragen kann. Jedes Objekt bietet dafür die Methode clone(), die sich überschreiben lässt.
 

Jango

Gesperrter Benutzer
Nur die ganze Pointer Geschicht verirrt mich total.

Muss es nicht.
Natürlich gibt es in Java auch Pointer - nur man möchte was eigenes machen und verbannt den Begriff.
Eine Referenz ist auch nur ein Pointer - man muss sich die ganze Sache selbst eingestehen.
In C++ ist ein Pointer ein Verweis auf einen Speicherplatz. Verweis = Referenz?
Java musste im Zuge der Veränderung neue Wege gehen, darum hat man sich für das Altbewährte neues ausgedacht.
Pointer gibt es auch in Java - sonst kann man nicht OOP programmieren.
Nur man nennt es nicht so, weil man was Eigenes haben will...
 

KuhTee

Aktives Mitglied
Pointer gibt es auch in Java - sonst kann man nicht OOP programmieren.
Also den Satz würd ich so nicht stehen lassen. Wobei natürlich sicher diskutabel ist, was "Pointer" im Kontext einer Programmiersprache bedeutet bzw wie gut die Sprache kaschiert, das intern am Ende doch Pointer verwendet werden. Aber Java kaschiert das eben nur bedingt.

@TO. Ich würd das ganze Objekt-Konzept wie du es aus C++ kennst erst mal nach hinten schieben und nicht versuchen, einzelne Punkte auf Java zu übertragen. Das funktioniert zwar in Teilen, im nächsten Schritt stolperst du dann aber doch wieder. Sei es das nicht existierende Java-Equivalent zu C++ Referenzen, "virtual" vs "final", implizite Konvertierung oder diverses Anderes. Java und C++ mögen zwar ähnlich aussehen, ticken aber was Klassen und Objekte angeht sehr unterschiedlich.
 

Jango

Gesperrter Benutzer
Aber Java kaschiert das eben nur bedingt.

Bedeutet?

Edit:

Zeiger, Pointer, Referenzen... gibt es in jeder Hochsprache.
Was viele hier nicht wissen ist, das man damit auch rechnen kann.
Zeigerarithmetik ist Bestandteil von C, C++, C#.
Man kann es mögen, oder hassen. Geziehlt eingesetzt ist es ein Segen - aber Java-Entwickler können über den Rand ihres gelernten Stoffes nicht hinaussehen...
 
Zuletzt bearbeitet:

Ark

Top Contributor
Was viele hier nicht wissen ist, das man damit auch rechnen kann.
Zeigerarithmetik ist Bestandteil von C, C++, C#.
Und genau das kann man mit Referenzen (wie man sie aus z.B. Java kennt) nicht machen. Das würde man dann wohl "Referenzarithmetik" nennen; selbst Google findet dieses Wort so gut wie nie.

Selfpwnd?

Ark
 

KuhTee

Aktives Mitglied
Was viele hier nicht wissen ist, das man damit auch rechnen kann.
Oh danke, dass du mich an deinem Wissen teilhaben lässt :)

Zeigerarithmetik ist Bestandteil von C, C++, C#.
C auf jeden Fall. Jeder der in der stinknormalen nicht-lowlevel Anwendungsentwicklung mit Zeigerarithmetik kommt, wird von mir sofort verhauen.

Geziehlt eingesetzt ist es ein Segen
Aber genau das ist der Punkt: In den Bereichen, in denen Java eingesetzt wird, ist Zeigerarithmetik komplett fehl am Platz. Ebenso wie in C++, wenn man auf diesem Level arbeitet. Zeigerarithmetik ernsthaft genutzt habe ich bisher nur, als ich low-level auf einem ARM entwickelt habe. Und das macht man mit Java nicht. Vielleicht macht mans auch deshalb nicht, weil es nicht geht. Aber das ist wohl standpunktabhängig.

- aber Java-Entwickler können über den Rand ihres gelernten Stoffes nicht hinaussehen...
Ich hoffe, das galt nicht mir? :D

Und genau das kann man mit Referenzen (wie man sie aus z.B. Java kennt) nicht machen.
Die Sache ist eben, dass "Referenzen" in Java nur kaschierte Pointer sind. Das ist das, was ich vorher sagte, Jango aber wohl nicht so recht verstanden hat: Man hat in Java "Referenzen", was im Endeffekt kaschierte Pointer sind, mit den Nachteilen (können null werden), aber ohne die Vorteile, die sie einem potentiell bieten. Während Referenzen in C++ eben komplett anders ticken und auch nicht mit Pointern verglichen werden können.
 
Zuletzt bearbeitet:

Jango

Gesperrter Benutzer
Die Sache ist eben, dass "Referenzen" in Java nur kaschierte Pointer sind. Das ist das, was ich vorher sagte, Jango aber wohl nicht so recht verstanden hat: Man hat in Java "Referenzen", was im Endeffekt kaschierte Pointer sind

Wenn du es so besser verstehst - von mir aus...:joke:

Insgesamt ist Java aber viel besser als C++.

:joke:

Natürlich.
Aber nur für Leute, die nichts anderes kennen... ;)
 
T

trööhööt

Gast
die diskusion ob man "pointer" und "referenz" gleichbedeuten synonym verwenden kann / soll / darf gabs ja hier schon oft ... und teilweise auch mit recht guten antworten ...

persönlich habe ich davon folgendes mitgenommen

eine "Java-Referenz" wird in der VM intern als ein "C-Pointer" abgebildet ... aber deswegen ist eine "Java-Referenz" noch lange kein "C-Pointer" denn es fehlen zwei wichtige eigenschaften :

1) Pointer-Arithmetik : die möglichkeit die im pointer hinterlegte numerische speicher-adresse direkt zu manipulieren und mit dieser zu "rechnen" bzw als "ergebnis" einer rechnung zu setzen
2) Pointer-Pointer : einen Pointer auf einen anderen Pointer zeigen lassen was so in java mit "Java-Referenzen" nicht möglich ist denn bei "referenz2=referenz1" wird lediglich die "Referenz" kopiert

auch wenn am ende in der VM selbst natürlich eine referenz auch wieder nur ein pointer auf einen bestimmten speicher-bereich ist so ist eine "Java-Referenz" selbst aber noch lange kein "C-Pointer", auch wenn die eigentliche funktion gleich ist, und darum sagt man das es in Java keine "Pointer" gibt sondern nur "Referenzen"

in wie weit man nun eine "Java-Referenz" mit jenen aus C++ oder C# vergleichen kann weis ich nicht ...


und zum statement Java sei besser als C++ : es kommt vor allem darauf an was man subjektiv als "besser" betrachtet ... aber von den objektiven vorteilen liegt C++ deutlich vor Java ...
 

Marco13

Top Contributor
Nicht direkt zynisch, es sollte nur ein subtiler Hinweis auf die Tendenz sein, in der sich dieser Thread entwickelt.

Aber mal im Ernst: Zeigerarithmetik in bestimmter Form kann praktisch sein. Ein Schweizer Taschenmesser auch. Aber erstens kann man alles übertreiben ...
swiss-army-knife.jpg

und zweitens ist die Komplexität, die durch das Wegfallen von Pointern aus der Sprache genommen wird eine angemessene Vereinfachung wenn es darum geht, Software zu entwickeln, wo die Komplexität nicht in der Entwicklung des kompliziert-obfuskiertesten for-Loops liegen soll.
 

KuhTee

Aktives Mitglied
und zweitens ist die Komplexität, die durch das Wegfallen von Pointern aus der Sprache genommen wird eine angemessene Vereinfachung wenn es darum geht, Software zu entwickeln, wo die Komplexität nicht in der Entwicklung des kompliziert-obfuskiertesten for-Loops liegen soll.
Na, ich weiss nicht, ob das dann mit Java so sonderlich geglückt ist. Ich mein, ich muss immer noch auf null prüfen, und ich muss jetzt an diversen Stellen Nullpointerexceptions fangen. Da nehm ich dann doch lieber richtige Referenzen, so wie in C++ :)
 
H

hüteüberhüte

Gast
3 Dinge dazu :D :
1. Habe ich in diesem Thema alles gelesen :D
2. Waluigi muss seine Aktivierungs-E-Mail noch bestätigen...
3. Heißen die Dinger auch in Java Pointer/Zeiger, nur was man damit machen kann, unterscheidet sich von anderen Sprachen
(4. pointer java - Google-Suche )

So, jetzt dürft ihr wieder anfangen zu haten, wie dumm ich doch bin usw.

@pro2: Danke für den Link!
 
Zuletzt bearbeitet von einem Moderator:
T

trööhööt

Gast
niemand hat je gesagt das diese "dinger" keine pointer wären ... es wurde ledichlich gesagt das man in "der sprache java" dieses wort nicht (gerne) nutzt um keine verwechslungsmöglichkeit mit "richtigen, nativen C-Pointern" zu bieten ...
warum man sich dennoch dafür entschieden hat die (eigentlich korrekterweise) ReferenceEqualsNullException nunmal NullPointerException zu nennen weis nur der der sich das ausgedacht hat ...
 

langhaar!

Bekanntes Mitglied
Zeiger, Pointer, Referenzen... gibt es in jeder Hochsprache

Nein.
Bei Prolog sicherlich nicht.
Bei Logo und Forth bin ich mir nicht ganz sicher (ist 20 Jahre her), bei Basic und Fortran gibt's auch nichts (je nachdem, ob man diese bereits als Hochsprache ansieht).

Ganz generell denke ich, dass insbesondere bei Sprachen des deklarativem Programmierparadigmas noch unzählige Sprachen ohne Zeiger und Referenzen vorkommen.
 

Jango

Gesperrter Benutzer
Ganz generell denke ich, dass insbesondere bei Sprachen des deklarativem Programmierparadigmas noch unzählige Sprachen ohne Zeiger und Referenzen vorkommen.

Und ich hab gehört, dass es auf der Welt Regionen gibt, die nicht einmal Strom haben...
Ausserdem gibt es Gebiete, die nicht mal an ein Wassernetz angeschlossen sind...
Die Diskussion hier ist völlig blöd. 'Ich weiß was dazu' - 'Ich weiß das besser' - 'Nee, ich weiß das besser'.
Macht einfach einen Strich darunter - fertig!
 

langhaar!

Bekanntes Mitglied
Die Diskussion hier ist völlig blöd. 'Ich weiß was dazu' - 'Ich weiß das besser' - 'Nee, ich weiß das besser'.
Macht einfach einen Strich darunter - fertig!

???:L
Wieso gibst du denn erst mit Falschaussagen Anlass zu Diskussion?

Was erwartest du? Ein Forum dient zum Austausch. Dummes Zeug schreiben und sich beschweren, dass dies fachlich kommentiert wird, steht dem entgegen.
 

Noctarius

Top Contributor
Halten wir fest Pointer in der Reinform vom C / C++ / C# gibt es in Java nicht. Java kennt Referenzen, die natürlich (immerhin ist die Standard-JVM in C++ implementiert) irgendwie intern auf entsprechende C++ Pointer gemapped sind um an den Speicherbereich eines Objektes zu kommen.

Referenzen in Java bieten mit normalen Mitteln KEINEN direkten Zugriff auf entsprechende Speicherbereiche und bieten auch keine Möglichkeit sich die passende Adresse geben zu lassen (was dank GarbageCollector und permanentes Umkopieren der Objekte) auch nur bedingt möglich ist (auch in C# ;-)).
Auch die Standardimplementierung von [c]hashcode()[/c] gibt NICHT die Speicheradresse aus sondern die interne ID des Objektes.

Damit beenden wir die Diskussion, falls der TO noch fragen hat möge er bitte einen entsprechenden, neuen Thread aufmachen ohne dieses ganze "blablablaflaming" der Anderen.

PS: Wer es ganz genau wissen will, für den sind Referenzen virtuelle Zeiger auf die Holder-Structure innerhalb des Verwaltungsspeichers in der die JVM alle Objektadressen vorhält. Innerhalb der referenzierten Addresse steht dann die aktuelle, echte Adresse des Objektes innerhalb des Heaps (und nur dieser 32Bit/64Bit Wert wird während Objektverschiebungen verändert).
Sowas kann man im Source des JDK nachlesen (src/share/vm/oops/oop.hpp, src/share/vm/oops/klass.hpp - da sieht man auch wie eine sizeof(...) in Java aussehen müsste).

PPS: Thread closed
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
Detlef Bosau nichtstatische Innere Klasse, this Pointer. Java Basics - Anfänger-Themen 47
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
Y Pointer / Referenz - Theorie Java Basics - Anfänger-Themen 3
Orkanson Null Pointer Expception Java Basics - Anfänger-Themen 3
J Pointer Java Basics - Anfänger-Themen 11
C Null Pointer Exception Java Basics - Anfänger-Themen 10
G Null Pointer Exception Java Basics - Anfänger-Themen 4
8 Referenz (Pointer, Zeiger) in Java Java Basics - Anfänger-Themen 9
D OOP Warum bekomme ich eine Null-Pointer Exception!!? :( Java Basics - Anfänger-Themen 4
S Abzählen mit Pointer Java Basics - Anfänger-Themen 2
A Null Pointer Exception in Liste Java Basics - Anfänger-Themen 11
A Methoden "Pointer" als Übergabeparameter Java Basics - Anfänger-Themen 5
L Null Pointer Exception bei setText Java Basics - Anfänger-Themen 9
T Null Pointer Exception Java Basics - Anfänger-Themen 4
G Null Pointer Exeption Java Basics - Anfänger-Themen 8
D Debug Current Instruction Pointer Fehler Java Basics - Anfänger-Themen 8
T Null Pointer Exception Java Basics - Anfänger-Themen 8
H Null Pointer Exception Problem Java Basics - Anfänger-Themen 3
M Sudoku-Löser: Fragen zu Pointer und Rekursion Java Basics - Anfänger-Themen 15
L Null Pointer Exception bei Focus Event bei einem JTextField Java Basics - Anfänger-Themen 2
D Null-Pointer-Exception Java Basics - Anfänger-Themen 5
E Hash Map - Null Pointer Exception? Java Basics - Anfänger-Themen 3
L Pointer per Funktion übergeben Java Basics - Anfänger-Themen 5
B Call By reference (Null pointer exception) Java Basics - Anfänger-Themen 6
J Null Pointer Exception in der "ob Null"-Abfrage? Java Basics - Anfänger-Themen 37
B Null Pointer Exception Java Basics - Anfänger-Themen 7
A Null Pointer Exception beim Erstellen eines Arrays aus einer eigenen Klasse Java Basics - Anfänger-Themen 3
K Null pointer exception in Methode Java Basics - Anfänger-Themen 4
D Null Pointer Exception Java Basics - Anfänger-Themen 8
D null pointer exception Java Basics - Anfänger-Themen 3
M Null Pointer Exception Java Basics - Anfänger-Themen 18
Z Null Pointer?! WHY? Java Basics - Anfänger-Themen 11
T Null Pointer Exception Java Basics - Anfänger-Themen 2
F Null Pointer Exception #2 Java Basics - Anfänger-Themen 5
I Unerklärliche Null-Pointer-Exception bei JRadioButton Array Java Basics - Anfänger-Themen 2
J Null-Pointer -> Code-Zeile ausgeben möglich? Java Basics - Anfänger-Themen 7
H Null Pointer Exception? Java Basics - Anfänger-Themen 4
E Nativen Code verwenden mit Jna, Pointer problem Java Basics - Anfänger-Themen 7
N null pointer exeption problem Java Basics - Anfänger-Themen 4
G Null Pointer Exception Java Basics - Anfänger-Themen 10
C große Matrizen, Performance, (Pointer?) Java Basics - Anfänger-Themen 6
G function pointer Java Basics - Anfänger-Themen 5
N null pointer exception Java Basics - Anfänger-Themen 6
F ArrayList! Pointer, Referenzen! Java Basics - Anfänger-Themen 4
S Null-Pointer-Exception Java Basics - Anfänger-Themen 5
H Null pointer Exeption Java Basics - Anfänger-Themen 4
R Thread geht jetzt - aber - Fehler "Null-Pointer" Java Basics - Anfänger-Themen 20
B Null Pointer Exception Java Basics - Anfänger-Themen 2
F Referenz Pointer oder doch nochmal neu suchen ? Java Basics - Anfänger-Themen 2
S Pointer? Java Basics - Anfänger-Themen 9
L nur kleines null Pointer Exception problem Java Basics - Anfänger-Themen 9
R Null Pointer Exception von anderer Klasse aus. Java Basics - Anfänger-Themen 2
S Vector wirdn icht gefüllt, null Pointer, was ist der Fehler Java Basics - Anfänger-Themen 6
N NULL Pointer Exception Java Basics - Anfänger-Themen 4
J Java.lang Null Pointer Exception Java Basics - Anfänger-Themen 3
Dilandau null pointer exception - woran liegts? Java Basics - Anfänger-Themen 16
brypa Java Grundlagen Java Basics - Anfänger-Themen 97
M Sammelsarium an Grundlagen Grundlagen Fragen Java Basics - Anfänger-Themen 11
T Java Grundlagen Java Basics - Anfänger-Themen 13
L Viele Fragen zu den Grundlagen Java Basics - Anfänger-Themen 5
C Mein Video zu Java Grundlagen Java Basics - Anfänger-Themen 8
G Grundlagen der PS-Java Java Basics - Anfänger-Themen 8
J OOP Theoretische Grundlagen Java Basics - Anfänger-Themen 5
G OOP [Eilig] Biete 10€ für Lösung von 2 Grundlagen-Aufgaben Java Basics - Anfänger-Themen 6
B Lernzeit für C++ und Java Grundlagen Java Basics - Anfänger-Themen 11
G Grundlagen sitzen nicht bzw. nicht intelligent genug Java Basics - Anfänger-Themen 7
D Erste Schritte JEE Grundlagen lernen Java Basics - Anfänger-Themen 3
J Compiler-Fehler Probleme bei Grundlagen Java Basics - Anfänger-Themen 12
B Grundlagen von Methoden an folgendem Beispiel Java Basics - Anfänger-Themen 52
D Quelle für Java-Grundlagen gesucht Java Basics - Anfänger-Themen 16
J Anfängerfrage zu Grundlagen von Packages Java Basics - Anfänger-Themen 7
D Grundlagen - Operatoren Java Basics - Anfänger-Themen 5
B Grundlagen zu Java Java Basics - Anfänger-Themen 18
G Grundlagen Bild laden und zeichen (anzeigen) Java Basics - Anfänger-Themen 2
7 Applets - einfachste Grundlagen Java Basics - Anfänger-Themen 24
M [Suche] Grundlagen der Java-Programmierung Java Basics - Anfänger-Themen 17
C Grundlagen: Methoden Java Basics - Anfänger-Themen 4
A Grundlagen Array Java Basics - Anfänger-Themen 4
T Grundlagen ganz am Anfang Java Basics - Anfänger-Themen 12
O Vererbung Grundlagen Java Basics - Anfänger-Themen 4
megachucky JDBC-Grundlagen: Verständnisprobleme Java Basics - Anfänger-Themen 31

Ähnliche Java Themen

Neue Themen


Oben