| 

.NET C# Java Javascript Exception

2
Hallo,
Falls ich mit meinen Annahmen nicht richtig liegen sollte, kann diese Frage gerne bearbeitet werden. (soll ja auf codekicker gehen)
Also, komplexe Datentypen(groß geschrieben) sind Objekte die nützliche Funktionen haben, die elementaren Datentypen(klein geschrieben) nicht liefern.
Elementare Datentypen verbrauchen weniger Speicher? Ist das relevant?
Wann soll ich welchen Typ verwenden?

Edit: Ich meinte wann benutzt man die elementaren Datentypen und wann die zugehörige Wrapperklasse?
News:
08.09.2009
Sulfat 41 1 3
7 Antworten
3
Deine Annahme bzgl. der Funktionen, die Objekte liefern und elementare Datentypen nicht, stimmt schon einmal.

Allerdings hat es den Anschein, als hättest Du das Prinzip der objektorientierten Programmierung nicht ganz verstanden. Den "Unterschied" zu erläutern kann Seiten füllen, da zwischen diesen beiden "Datentypen" Welten liegen.

Ein Versuch sei trotzdem gewagt: Elementare Datentypen repräsentieren Werte, die binär dargestellt werden können und direkt durch die CPU bearbeitbar sind. Das sind Wahrheitswerte (Ja/Nein), Zahlen und einzelne Zeichen.

Objekte wiederum sind eine eindeutig identifizierbare Konstellation elementarer und/oder komplexer Datentypen, den sogenannten Attributen. Deren Werte bilden die für das betrachtete Objekt ausgeprägten "Eigenschaften" des Objekts ab. Zusätzlich bietet das Objekt Methoden an, die basierend auf diesen Eigenschaften Aktionen ermöglichen. Die Konstellation von Attributen udn Methoden wird in der Klasse des Objekts beschrieben.
Ein Beispiel: Eine Klasse "Koordinate" besteht aus den zwei Attributen x und y, jeweils Zahlen. Dazu gibt es eine Methode "verschiebe(x, y)", der man zwei Zahlen übergibt, die die Verschiebung der Koordinate im Koordinatensystem repräsentieren. Nun kannst Du zwei Objekte dieser Klasse erzeugen, das eine bspw. mit den Attributen x=1, y=2; das andere mit x=3, y=4. Die Objekte haben den gleichen Aufbau (gleicher komplexer Datentyp), aber ihre Identität (und hier auch die Ausprägung der Attribute) ist unterschiedlich. Nun kannst Du auf dem ersten Objekt die Methode verschiebe(2, 5) aufrufen und erhältst dann ein Objekt mit den Koordinaten x=3, y=7; analog beim zweiten Objekt x=5, y=9.

Als Literatur empfehle ich: Java ist auch eine Insel.
08.09.2009
anonym 141 1
Vielen Dank für die Antwort. Mir ging es hauptsächlich um die Klassen die auch als elementarer Datentyp vorliegen. int <-> Integer usw. Laut deinem Link heißen die Wrapperklassen. (Ich editiere meine Frage mal)
Sulfat 08.09.2009
3
Primitive Objekttypen (elementare) sind in Java aus Performancegründen nicht als Klassen realisiert, wie es beispielsweise in Smalltalk der Fall ist. Das heißt insbesondere, dass an Objekte dieser Typen keine Nachrichten gesandt werden können (Methodenaufrufe), weil sie keine Methoden besitzen, um darauf reagieren zu können. Es existiert aber in der Klassen-Bibliothek des JRE für jeden primitiven Objekttypen eine Wrapper-Klasse (komplexer Datentyp), die einige Methoden zum Umgang mit diesen Objekten zur Verfügung stellt.
Objekte hingegen sind Instanzen von Klassen (Datenstrukturen), die sowohl Daten als auch Methoden auf diesen Daten enthalten können. Klassen bieten in Java erst die möglichkeit OO zu Programmieren.
Elemtare Datentypen werden im Speicher anders verwaltet als Objekte. Sie haben keine eindeutige Identität, wie Objekte sie haben. Deswegen ist es für die Laufzeitumgebung einfacher diese zu verwalten und damit auch performanter.
Wann welcher Typ verwendet werden soll, ist eine Frage der zu implementierenden Funktionalität. Denn wenn es genügt primitive Typen zu verwenden, um sein Ziel zu erreichen so macht das, das Programm nicht nur übersichtlicher sondern auch performanter s.o..
08.09.2009
Björn 101 1
3
Hallo,
Die nützlichen Funktionen der komplexen Klassen (oder auch Wrapperklassen genannt), von denen du redest, sind vor allem Stringkonvertierungen. Also zum Beispiel 'Interger' zu 'String' und 'String' zu 'Integer'. Was mit dem elementaren Datentyp (oder auch primitiven Datentyp) 'int' nicht ohne weiteres möglich ist. Die Wrapperklassen erweitern also die primitiven Klassen um ein paar statische Funktionen. Jedoch der belegte Arbeitsspeicher sollte der gleiche sein, da der Datentyp immernoch ein primitiver ist. Es stehen nur mehr Möglichkeiten zur Verfügung mit den Werten im Arbeitsspeicher umzugehen. Der Nachteil von Wrapperklassen ist aber, dass sie allesamt final sind. Man kann sie also nur einmal mit einem Wert belegen. Sowas wie 'i=i+1' ist nicht möglich wenn i von Typ 'Integer' ist. Jedoch ist es möglich einen primitiven Typen in einer Wrapperklasse zu konvertieren und andersrum.

Ein Beispiel:
Integer i = new Integer(10); // i==10
int j = i.intValue(); // j==10
Integer k = Integer.valueOf(j); // k==10

Wann du welchen Typen verwenden sollst hängt davon ab, was du damit machen möchtest. Verwendest du beispielsweise reine Rechenoperationen solltes du den primitiven (elementaren) Typ 'int' verwenden. Möchtest du zum Beispiel einen String (z.B.: aus einem Eingabefeld) in eine Zahl umwandeln musst du 'Integer' verwenden.

Noch ein kleiner Trick:
int i = Integer.parseInt("1337");
Damit wandelst du einen 'String' in einen 'Integer' um, welcher automatisch sofort in ein 'int' konvertiert wird. Damit kannst du gleich mit i weiter rechnen.
Dieses Verfahren nennt sich Autoboxing. Dadurch sparst du dir die konvertierung von 'Integer' zu 'int', wie im Beispiel oben beschrieben.
Das Autoboxing funktioniert natürlich auch andersrum ;)
hth
08.09.2009
MoD 61 1
3
Ein wichtiger Unterschied zwischen primitiven Datentypen und Klassen in Java sind die Referenzen. Bei primitiven Datentypen wird in der Variable direkt der Wert gespeichert. Bei Objekten wird in der Variable eine Referenz (ein Zeiger) auf den tatsächlichen Wert gespeichert. Mehrere Variablen können so auf das gleiche Objekt verweisen. Lässt sich dieses Objekt ändern, dann lassen sich Änderungen die ein Codeteil durchführt auch von anderen Stellen aus sehen.
08.09.2009
Mnementh 201 1 1 4
Mnementh 201 1 1 4
Prinzipiell könnte eine Änderungen auch an anderen Stelle sichtbar sein, nur haben die Wrapperklassen keinerlei set-Methoden, weder explizit noch implizit
stefan.bachert 08.09.2009
1
Ein manchmal wichtiger Unterschied ist auch das Variablen primitiver Datentypen keinen undefinierten Wert ("nil") annehmen können, sie enthalten wenigstens den in Java wohldefinierten Default-Wert (z.B. 0 für Zahlenwerte), während Referenzen auf Objekte natürlich auch null sein können.
08.09.2009
mike 61 1 1
0
Die Klassenwrapper sind dann nützlich wenn

  • die Methoden gebraucht werden. Das ist vor allem beim Wandeln in andere bzw. von anderen Darstellungen der Fall.
  • Wenn auch der Wert null ausgedrückt werden soll. Das kann bei Datenbanken der Fall sein.
    Ein Wert kann vorhanden sein, oder eben nicht (null)
  • Wenn ein Wert als Object übergeben wird und verschiedene Typen haben kann. z.B. Integer, Long, String


Ein Wrapperobjekt ist effektiv ein unveränderlicher Wert, da keine set-Methode existiert. Es hat die selbe Semantik wie String, die auch konstant sind.
08.09.2009
stefan.bachert 395 4
0
Häufig arbeitet man mit Object Arrays, statt sich dafür eine Klasse mit den entsprechenden Membern zu bauen. Das Object Array nimmt natürlich nur Integer, Long, Float, Boolean etc. auf und keine int, long, float, boolean. Ansonsten vermeiden wo immer es gebt, da die Objekte langsamer sind, mehr Speicher benötigen und schwieriger in der Benutzung sind, da man zum Rechnen immer mit .intValue() etc. zugreifen muß.
08.09.2009
BeachBlocker 617 3

Stelle deine Java-Frage jetzt!