Datentypen Welcher ist der beste Datentyp?

In den meisten Tutorials wird Anfängern zu einem String oder einem Int geraten. Ist das nicht schlecht? Int stellt zum Beispiel weniger Speicherplatz zur Verfügung als andere Datentypen. Sollte man nicht lieber die größten Datentypen nehmen, wie zum Beispiel unsigned long long? Da hat man viel mehr Zahlen zur Verfügung, also mehr Freiheiten und es wird unwahrscheinlicher, dass man an Grenzen stößt und das Programm abstürzt.
Aber wenn ich ihn benutze wird mir immer gesagt, es sei "schlechter Programmierstil". Warum wird es als gut angesehen, sich selbst einzuschränken?
 

InfectedBytes

Top Contributor
Erstmal: In Java gibt es keinen unsigned long long oder ähnliches.

Ansonsten:
Es kommt halt auf das Problem an. Wenn ich nur die Zahlen 1 bis 10 darstellen will, ist es sehr sinnlos nen long zu nehmen.
Wenn ich mit Zahlen rechnen will, ist es halt sehr sinnlos nen String zu nehmen.
Ansonsten ist es halt auch ne Frage des Speichers. Wenn man beispielsweise eine Million Zahlen aus dem Bereich 0-100 speichern will, wäre es nunmal sehr dumm dafür nen long Array zunehmen, obwohl ein byte Array reicht. Warum sollte man auch unnötig speicher verschwenden
 
N

neoexpert

Gast
Je simpler der Datentyp desto schneller (in der Regel) wird man damit rechnen können. BigDecimal-Addition ist langsamer als long-Addition ist langsamer als Integer-Additon.
 
Zuletzt bearbeitet von einem Moderator:

Mxxxt

Mitglied
Im Prinzip hast dir die Frage selber beantwortet. ->Es reserviert weniger Speicher.
Wozu denn gleich einen größeren nehmen? Du kannst sie beliebig umwandeln, sobald es nötig wird.
 
Achso, danke für die Erklärung. Das heißt, als Programmierer muss man quasi abschätzen, was einem wichtiger ist:

Entweder wenig Speicherverbrauch aber mehr Einschränkungen
Oder mehr Freiheit aber dafür ein vollerer Speicher (was ja bei 8-16 Gigabytes nicht so schlimm ist..?)

Mir ist nur schleierhaft, warum man es sich manchmal unnötig kompliziert macht, zum Beispiel auch dass Attribute private sein sollen oder dass man globale Variblen nicht benutzen soll...
 
X

Xyz1

Gast
Gute Tuts empfehlen Anfängern kleinere Datentypen als int. (Int gibt's nicht BTW) Also diese Aussage wäre auch falsch.
long braucht auf einmal doppelt so viel Speicher und ist nicht o. B. d. A. langsamer.
Es geht darum, sehr schnell von A nach B zu kommen, sobald aber die Reifen durchdrehen, "bewegst du dich nicht vorwärts".
Diese Metapher erklärt schon alles - ohne ins Detail zu gehen.
Ich wette, da kommen noch lustige Fragen auf uns zu. :cool:
 

InfectedBytes

Top Contributor
Achso, danke für die Erklärung. Das heißt, als Programmierer muss man quasi abschätzen, was einem wichtiger ist:

Entweder wenig Speicherverbrauch aber mehr Einschränkungen
Oder mehr Freiheit aber dafür ein vollerer Speicher (was ja bei 8-16 Gigabytes nicht so schlimm ist..?)

Mir ist nur schleierhaft, warum man es sich manchmal unnötig kompliziert macht, zum Beispiel auch dass Attribute private sein sollen oder dass man globale Variblen nicht benutzen soll...
Am besten fängst du mal ganz von vorn an und liest dir einfach mal ein paar Grundlagen Bücher und ähnliches durch^^.

Was glaubst wieviel du von deinem RAM noch hättest, wenn jedes Programm einfach unnötigerweise 2-8 mal soviel Speicher verbraucht wie nötig?

Ist halt so als würdest du sagen, dass ein Auto beliebig viel Benzin verbrauchen darf, nur weil du nen fetten 100 liter Tank hast.

edit:
und zu dem "unnötig kompliziert":
Findest du es auch unnötig kompliziert das dein Pin Code von der Bank auch "private" ist? Wäre doch viel einfacher und praktischer wenn jeder deinen Pin Code kennen würde!
 
Findest du es auch unnötig kompliziert das dein Pin Code von der Bank auch "private" ist? Wäre doch viel einfacher und praktischer wenn jeder deinen Pin Code kennen würde!

Nein, hier macht Geheimhaltung ja Sinn, weil mir sonst jeder mein Geld klauen würde.
Aber warum darf Klasse A nicht auf Attribute von Klasse B zugreifen? Warum der Umweg über Getter und Setter, wenn man auch einfach direkt mit den Variablen arbeiten kann?
 

Mxxxt

Mitglied
Achso, danke für die Erklärung. Das heißt, als Programmierer muss man quasi abschätzen, was einem wichtiger ist:

Entweder wenig Speicherverbrauch aber mehr Einschränkungen
Oder mehr Freiheit aber dafür ein vollerer Speicher (was ja bei 8-16 Gigabytes nicht so schlimm ist..?)

Mir ist nur schleierhaft, warum man es sich manchmal unnötig kompliziert macht, zum Beispiel auch dass Attribute private sein sollen oder dass man globale Variblen nicht benutzen soll...
Die Typen belegen halt unterschiedlich viel Platz im RAM.
byte = 8 Bit
short = 16 Bit
int = 32 Bit
long = 64 Bit
char = 16 Bit
float = 32 Bit
double = 64 Bit

private nutzt man um die Variable zu schützen. D.h. sie ist von außen nicht manipulierbar und nur via getter und setter Methoden ansprechbar.
 

Tobse

Top Contributor
Weil sie dann manipulierbar sind von außerhalb deiner App/Applet
Falsch. Manipulierbar sind sie immer (private aber nur mit erheblichem Aufwand).

Es geht bei der ganzen Aktion um das Vorbeugen von Bugs. Man benutzt Setter, damit man die Werte, die einer Variable zugewiesen werden, kontrollieren und limitieren kann. Wenn du denn Füllstand eines Tanks speicherst, macht es wenig sinn, da eine negative Zahl rein zu schreiben. Also schreibt man einen Setter, der diese Überprüfung macht. Damit der Setter nicht aus versehen (absichtlich geht IMMER) umgangen wird, macht man die Variable private. Damit man sie jetzt von aussen aber noch lesen kann, benutzt man einen Getter.
Man benutzt Getter und Setter für alle Variablen, weil man zu Beginn meist nicht alle diese Einschränkungen kennt. Wenn ein Projekt viel Code hat ist es äußerst mühselig alle Zugriffe auf die Variable in Aufrufe des Getters und Setters umzuwandeln.
 
X

Xyz1

Gast
Nein, hier macht Geheimhaltung ja Sinn, weil mir sonst jeder mein Geld klauen würde.
Aber warum darf Klasse A nicht auf Attribute von Klasse B zugreifen? Warum der Umweg über Getter und Setter, wenn man auch einfach direkt mit den Variablen arbeiten kann?
Achso, du beziehst dich jetzt hierauf:
http://www.java-forum.org/thema/java-aufgabe.175275/#post-1107609
Die Antwort ist: Ich war bewusst faul, habe im Sinne von Object-Oriented Design gegen Information Hiding and Encapsulation verstoßen und nach dem Keep It Simple Stupid-Prinzip gehandelt.
(Ich hoffe, ich habe einen Anfänger trotz Hinweisen nicht bewusst fehlgeleitet, aber zugleich hätte er durch die "vermeintlich" schlechtere Lösung auch auf eine besser kommen können.)
Security through obscurity - ist im weitesten Sinn nur bei deiner PIN sinnvoll - ist aber ein Prinzip, was mit OO und der Frage nach int nix mehr zu tun hat. ;)
 

Mxxxt

Mitglied
Falsch. Manipulierbar sind sie immer (private aber nur mit erheblichem Aufwand).

Es geht bei der ganzen Aktion um das Vorbeugen von Bugs. Man benutzt Setter, damit man die Werte, die einer Variable zugewiesen werden, kontrollieren und limitieren kann. Wenn du denn Füllstand eines Tanks speicherst, macht es wenig sinn, da eine negative Zahl rein zu schreiben. Also schreibt man einen Setter, der diese Überprüfung macht. Damit der Setter nicht aus versehen (absichtlich geht IMMER) umgangen wird, macht man die Variable private. Damit man sie jetzt von aussen aber noch lesen kann, benutzt man einen Getter.
Man benutzt Getter und Setter für alle Variablen, weil man zu Beginn meist nicht alle diese Einschränkungen kennt. Wenn ein Projekt viel Code hat ist es äußerst mühselig alle Zugriffe auf die Variable in Aufrufe des Getters und Setters umzuwandeln.
Naja, das mit den getter/setter hatte ich dadrüber schon erwähnt. Ich hätte es auch zusammenfassen können. Jedenfalls sind private Deklarationen nur innerhalb dieser Klasse ansprechbar, sonst brauch man halt getter und setter.
 
X

Xyz1

Gast
Die Typen belegen halt unterschiedlich viel Platz im RAM.
byte = 8 Bit
short = 16 Bit
...
Das stimmt so auch nicht. Gerade kleinere Typen können auch mehr Speicher reservieren.

Ich denke, warum int empfohlen wird, hat (hinsichtlich Speicherbelegung) zwei Gründe:
1) Der Tut Autor verwendet immer int und weiß es nicht besser,
2) int ist für die meisten Anwendungsfälle nicht zu groß und nicht zu klein.

Wenn int nicht mehr ausreicht, wäre ich mir auch bei long unsicher. Aber das kommt auf die Domäne an, wie immer.

Außerdem muss man sich fragen, in welche Richtung sich dieses Thema jetzt entwickelt ...
 

Tobse

Top Contributor
Jedenfalls sind private Deklarationen nur innerhalb dieser Klasse ansprechbar
Das ist aber falsch :) Über reflection kommt man an alle Member. Und letztendlich liegt das zeug sowieso nur im Speicherbereich der JVM; Code, der Zugriff auf diesen Speicherbereich hat, hat auch Zugriff auf diese Variablen. Private ist kein Sicherheitsfeature.
 

Mxxxt

Mitglied
Das ist aber falsch :) Über reflection kommt man an alle Member. Und letztendlich liegt das zeug sowieso nur im Speicherbereich der JVM; Code, der Zugriff auf diesen Speicherbereich hat, hat auch Zugriff auf diese Variablen. Private ist kein Sicherheitsfeature.
Folgendes steht bei mir in den Studienmaterial:
private als Modifikator bietet maximalen Schutz: Auf derartige Datenelemente kann nur innerhalb einer Java-Klasse zugegriffen werden, ein Zugriff "von außen", d.h. aus einer anderen Java-Klasse heraus, ist nicht möglich. Gleiches gilt übringens auch für Methoden, die als "private" deklariert werden. Auch solche Methoden können nur innerhalb einer Java-Klasse aufgerufen werden , stehen für einen Aufruf "von außen" hingegen nicht zur Verfügung. Ein private Element ist Gegensatz zu einem public Element von außen nicht sichtbar.

Dann gehts mit der Kapselung weiter. Verstehe ich dich jetzt richtig, dass du dies als falsch deklarierst?
 

mrBrown

Super-Moderator
Mitarbeiter
Folgendes steht bei mir in den Studienmaterial:
private als Modifikator bietet maximalen Schutz: Auf derartige Datenelemente kann nur innerhalb einer Java-Klasse zugegriffen werden, ein Zugriff "von außen", d.h. aus einer anderen Java-Klasse heraus, ist nicht möglich. Gleiches gilt übringens auch für Methoden, die als "private" deklariert werden. Auch solche Methoden können nur innerhalb einer Java-Klasse aufgerufen werden , stehen für einen Aufruf "von außen" hingegen nicht zur Verfügung. Ein private Element ist Gegensatz zu einem public Element von außen nicht sichtbar.

Dann gehts mit der Kapselung weiter. Verstehe ich dich jetzt richtig, dass du dies als falsch deklarierst?

Jein, für den Kenntnissstand, den man hat wenn man dies lernt, gilt das erstmal. Auf dem "normalem" Weg kommt man da auch nicht ran.
Über Reflection geht aber generell alles.

Und die Daten müssen ja auch irgendwo im Speicher stehen, wer Zugriff auf den Speicher hat, kann die sehen, egal welcher Modifier dran steht ;)
 
X

Xyz1

Gast
Folgendes steht bei mir in den Studienmaterial:
private als Modifikator bietet maximalen Schutz: Auf derartige Datenelemente kann nur innerhalb einer Java-Klasse zugegriffen werden, ein Zugriff "von außen", d.h. aus einer anderen Java-Klasse heraus, ist nicht möglich. Gleiches gilt übringens auch für Methoden, die als "private" deklariert werden. Auch solche Methoden können nur innerhalb einer Java-Klasse aufgerufen werden , stehen für einen Aufruf "von außen" hingegen nicht zur Verfügung. Ein private Element ist Gegensatz zu einem public Element von außen nicht sichtbar.

Dann gehts mit der Kapselung weiter. Verstehe ich dich jetzt richtig, dass du dies als falsch deklarierst?
Wenn man davon ausgeht, dass das System nicht kompromittiert wurde, ist das richtig. (Was es auf deinem Kenntnisstand nicht ist) Über Reflection kommt man auch nicht ohne Weiteres dran. Eine PIN liegt aber als gesalzener Hash in irgendeiner Datenbank.

So, in welche Richtung soll sich dieses Thema entwickeln? Allgemeine Philosophiestunde?

Schön fände ich es, wenn er nochmal auf meine Frage antworten würd, ob er sich auf mich bezieht; wo ich private, public und Getter/Setter weggelassen habe, und einen Teil der Geschäftslogik in den Konstruktor gemogelt habe.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
J Layout Manager, welcher ist der Richtige für mein Program? Java Basics - Anfänger-Themen 1
C Welcher Datenbanktyp ? Java Basics - Anfänger-Themen 7
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
A JOPtionPaneOptionDialog Abfrage welcher Button gedrückt wurde? Java Basics - Anfänger-Themen 8
B Datentypen Welcher Typ wird beim Casten übernommen? Java Basics - Anfänger-Themen 12
B Datentypen Datentyp welcher den gleichen Namen wie die Klasse trägt? Java Basics - Anfänger-Themen 1
V JTable welcher Listener ? Java Basics - Anfänger-Themen 7
Tacofan Welcher Button wurde zuerst gedrückt? Java Basics - Anfänger-Themen 4
D Ausgeben welcher Thread gerade Arbeitet Java Basics - Anfänger-Themen 8
L Welcher Algorithmus ist das ? Java Basics - Anfänger-Themen 9
C Datentypen Array-Einträge überhalb der Array-Länge - welcher Wert? Java Basics - Anfänger-Themen 5
H Welcher Html-Parser? Java Basics - Anfänger-Themen 8
V Arraylist: Zählen welcher String am Häufigsten vorkommt Java Basics - Anfänger-Themen 5
S Vererbung/Herausfinden welches Objekt von welcher Klasse Java Basics - Anfänger-Themen 4
Binary.Coder Welcher Datentyp für den Simplex Algorithmus Java Basics - Anfänger-Themen 3
R Welcher Layout Manager-für so ein Fenster? Java Basics - Anfänger-Themen 5
M Properties Eintrag löschen, welcher in der JList "ausgewählt" wurde Java Basics - Anfänger-Themen 2
G Datentypen Welcher Datentyp Java Basics - Anfänger-Themen 2
R Welcher Weg um XML von URL zu laden? Java Basics - Anfänger-Themen 3
B Welcher Feld Typ für verschiedene Datentypen? Java Basics - Anfänger-Themen 4
E Welcher Package Name bei Eclipse/Android? Java Basics - Anfänger-Themen 2
M In welcher *.jar ist ... Java Basics - Anfänger-Themen 3
D ActionListener: welcher Button wurde geklickt Java Basics - Anfänger-Themen 7
M Diagramme erzeugen ,aber mit welcher Klasse Java Basics - Anfänger-Themen 7
T Welcher Typ für wiederkehrendes Datum (wie Heiligabend) Java Basics - Anfänger-Themen 4
G JRadioButton Objekte zugehörig zu welcher buttongroup Java Basics - Anfänger-Themen 3
S 2 ActionListener 1 JButton, welcher reagiert zuerst Java Basics - Anfänger-Themen 2
G Welcher Layout-Manager? *confused* Java Basics - Anfänger-Themen 2
B 2 String vergleichen danach welcher ist größer ? Java Basics - Anfänger-Themen 4
S Fehler , welcher ? Java Basics - Anfänger-Themen 4
M welcher Layoutmannager ist für Webseiten Outfit geeignet Java Basics - Anfänger-Themen 8
F Objekt vom Typ Interfaces: Prüfung von welcher Unterklasse? Java Basics - Anfänger-Themen 7
G Auf eine Klasse zugreifen,von welcher man nur den Pfad weiss Java Basics - Anfänger-Themen 4
S Wie unterscheiden welcher Button geklickt wurde? Java Basics - Anfänger-Themen 2
S welcher Konstructor zu erst bei Vererbung Java Basics - Anfänger-Themen 3
S Aktuell beste Methode um zwei Bilder zu vergleichen..? Java Basics - Anfänger-Themen 1
F Beste Datenstruktur zum Speichern? Java Basics - Anfänger-Themen 1
E Methoden Beste Bestellung Java Basics - Anfänger-Themen 13
S mehrfache if-Abfragen - beste Lösung Java Basics - Anfänger-Themen 1
4 Was ist der beste Lehrberuf um Programmieren (vor allem JAVA und APP) zu fernen Java Basics - Anfänger-Themen 5
N Beste Datendarstellung? Java Basics - Anfänger-Themen 3
manunana89 Bilder auf JFrame/beste Möglichkeit??? Java Basics - Anfänger-Themen 5
F Ewiges Leid mit "protected" (oder "wie der beste Freund eine hinrücks betrügt") Java Basics - Anfänger-Themen 26
Q Beste Komponenten für 3-Schichten-Architektur gesucht Java Basics - Anfänger-Themen 7
M Beste Art Bilder zu kopieren? Java Basics - Anfänger-Themen 4
X Beste Entwicklungsumgebung. Java Basics - Anfänger-Themen 10
R beste linux IDE? Java Basics - Anfänger-Themen 4
A Struktur -> Beste Lösung? Java Basics - Anfänger-Themen 3
F Datentypen Wertebereiche passender Datentyp Java Basics - Anfänger-Themen 5
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
MiMa Probleme mit Datentyp long ?? Java Basics - Anfänger-Themen 2
D Arraylist mit Komplexen Datentyp Java Basics - Anfänger-Themen 3
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
H Datentyp mit 3 Zuständen Java Basics - Anfänger-Themen 42
javaluke Erste Schritte Array nach Datentyp sortieren Java Basics - Anfänger-Themen 16
Kanaska Datentyp für Zahlenbereiche Java Basics - Anfänger-Themen 7
A Datentyp char Java Basics - Anfänger-Themen 27
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
C unverständlicher Code Attribute ohne Datentyp, wie geht das? Java Basics - Anfänger-Themen 8
T Datentyp mit Anführungszeichen drinnen Java Basics - Anfänger-Themen 3
R Datentypen Datentyp String lenght & charAT Java Basics - Anfänger-Themen 4
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
C Interface als Datentyp eines Attributes? Java Basics - Anfänger-Themen 6
F Datentypen Missverständnis Datentyp Java Basics - Anfänger-Themen 2
D Rechnen mit numerischen Datentyp Frage Java Basics - Anfänger-Themen 16
E Klassename als Datentyp??? Java Basics - Anfänger-Themen 4
F Wertebereich/Datentyp Java Basics - Anfänger-Themen 26
M Datentypen Java Datentyp Definition Java Basics - Anfänger-Themen 6
MiMa Datentyp Short Wert zuweisen über Methode Java Basics - Anfänger-Themen 2
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
E Datentypen Benutzerdefinierten Datentyp verwenden Java Basics - Anfänger-Themen 1
ms_cikar Java Datentyp unwandlung Java Basics - Anfänger-Themen 7
G Datentypen Tipps, Ratschläge erwünscht bzgl. Datentyp bestimmen über Wertebereich Java Basics - Anfänger-Themen 5
Y Warum void statt Datentyp + return Java Basics - Anfänger-Themen 4
M Interface als Datentyp Java Basics - Anfänger-Themen 12
R Variablen Datentyp erst während Laufzeit festlegen Java Basics - Anfänger-Themen 6
1 Neuen Datentyp für rationale Zahlen als Klasse entwickeln Java Basics - Anfänger-Themen 20
R Datentypen Datentyp eines Werts in einer Textdateizeile abfragen und ändern Java Basics - Anfänger-Themen 4
R Interface Datentyp bei Erzeugung eines Objekts, dessen Klasse eine Schnittstelle implementiert Java Basics - Anfänger-Themen 18
B Collections Collection soll nur einen bestimmten Datentyp aufnehmen Java Basics - Anfänger-Themen 12
V Datentypen Frage zum Datentyp Byte Java Basics - Anfänger-Themen 11
B datentyp in binär umwandeln Java Basics - Anfänger-Themen 5
S Primitiver Datentyp Short , Vorteil/Nachteil Betrachtung Java Basics - Anfänger-Themen 6
J Field auf Datentyp prüfen Java Basics - Anfänger-Themen 8
D Datentyp Object Java Basics - Anfänger-Themen 2
A Datentypen Mehrdimensionaler Datentyp gesucht Java Basics - Anfänger-Themen 4
D Datentypen Abstrakter Datentyp lässt sich nicht casten Java Basics - Anfänger-Themen 7
F Klassenorganisation: Datentyp in Datentyp anlegen Java Basics - Anfänger-Themen 3
N Unerklärlich: Rekursiver Algorithmus gibt falschen Datentyp zurück... Java Basics - Anfänger-Themen 4
J Datentypen Was ist der Sinn vom Datentyp "char" ? Java Basics - Anfänger-Themen 11
G Eigener Autoboxing Datentyp Java Basics - Anfänger-Themen 3
Guybrush Threepwood Effizientester Datentyp zur Speicherung einer ungeordneten Menge von ints Java Basics - Anfänger-Themen 8
B Datentyp für +,-,*,/ Java Basics - Anfänger-Themen 5
D Datentypen Rekursiver Datentyp Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben