Also es gibt zwei unterschiedliche Typen von "Werten" in Java, naemlich Primitive und Klassen. Vier der wichtigsten Unterschiede sind:
1. Primitive sind unveraenderbar und sind keine Klassen (haben keine Methoden und so weiter).
2. Primitive werden immer als Wert uebergeben, nicht als Instanz. Primitive koennen nie null sein.
3. Primitive und Klassen sind nicht austauschbar (sie wirken nur so durch den Compiler).
4. Operatoren koennen nur mit Primitiven verwendet werden (auszer halt + in Kombination mit Strings).
Primitive sind immer die kleingeschriebenen Typen, wie int oder char. Dazu gibt es dann die Klassen-Varianten wie Integer und Character.
Da Java auf Klassen basiert, und fortgesetzt damit auf Object, ist die Konvertierung an vielen Stellen notwendig weil Methoden einfach keine primitiven Typen uebernehmen koennen ohne diese explizit zu deklarieren. In Reflection ist dies zum Beispiel der Fall. Spielt jetzt gerade aber keine Rolle.
Ich habe gesagt dass diese nicht austauschbar sind, wieso kompiliert dann folgender Code und funktioniert?
Java:
int wert =newInteger(5);Integer wert =5;
Die Antwort ist: Autoboxing. In dem Fall handelt es sich um "Hilfsfunktion" des Compilers welcher die Konvertierung automatisch vornimmt. Also der Code von oben wird in Wahrheit zu folgendem kompiliert:
Java:
int wert =newInteger(5).intValue();Integer wert =Integer.valueOf(5);
Ohne das wir etwas dazu machen muessen. Die Umwandlung von Primitiv in Klasse und zurueck (Boxing) uebernimmt fuer uns der Compiler (Autoboxing).
Aber, solche Umwandlung haben immer das Potenzial eine Klasseninstanz zu erzeugen, nehmen wir zum Beispiel folgenden Code:
Java:
int result =0;for(int counter =0; counter <500; counter++){
result = result + counter;}
Diese Schleife addiert ganz simpel 500 ints. Das gleiche nochmal aber mit Klassen:
Java:
Integer result =0;for(int counter =0; counter <500; counter++){
result = result + counter;}
Das erzeugt zusaetzlich 501 Instanzen der Klasse Integer, was wir so nicht bemerken weil der Compiler die Umwandlung uebernimmt:
Java:
Integer result =Integer.valueOf(0);for(int counter =0; counter <500; counter++){
result =Integer.valueOf(result.intValue()+ counter);}
Wir haben in der zweiten Variante also viel mehr Klassenabfall erzeugt als mit den primitiven Typen. Das ist etwas auf das man immer achten sollte.
In alten Java Versionen war es sogar schlimmer, valueOf verwendet einen Cache von Instanzen, also es gibt die Möglichkeit dass keine neue Instanz erzeugt wird wenn diese bereits im Cache existiert. Das ist aber ein Implementierungsdetail auf welches man sich nicht verlassen sollte. In alten Java Versionen wurde vom Compiler immer eine Instanz erzeugt:
Java:
Integer result =newInteger(0);for(int counter =0; counter <500; counter++){
result =newInteger(result.intValue()+ counter);}
Aber das wurde korrigiert irgendwo vor 1.5, glaube ich.
Ich persoehnlich mache immer gerne die Umwandlung haendisch (man kann in den IDEs eine Warnung dafuer einschalten), einfach damit ich nie den Ueberblick verliere wo Instanzen und Objekte erzeugt und verwendet werden und wo nicht.
Jap, aber das ist ein eindeutig deutschsprachiges Forum...die Verwirrung ist schon begründet.
Sprachen mixen finde ich...schwierig. Da muß ich immer aufpassen, sonst komme ich mit einer dritten Sprache durcheinander, die ich gerade lerne. Ja ne dumaju, tschto kto panimatch eto.
I think most do up to a certain point. Translating standard text ist ok, but translating program code is not such a good idea. "Integer" should remain "Integer" and not be translated to "Ganzzahl". The one attempt I know of to translate a programing language was aborted after MS Excel Basic 4 (or 5?).
Die meisten können das wohl bis zu einem gewissen Grad. Standardtext zu übersetzen ist ok, aber Programmcode zu übersetzen ist keine so gute Idee. "Integer" sollte schon "Integer" bleiben und nicht nach "Ganzzahl" übersetzt werden. Der eine mir bekannte Versuch, eine Programmiersprache zu übersetzen, wurde nach MS Excel Basic 4 (oder 5?) aufgegeben.
Mir ging's eigentlich schon um die vorgegebenen Java-Datentypen
Wenn es jemand lustig findet, einen Wrapper für Integer zu schreiben, der sich Ganzzahl nennt ... warum nicht.
Aber ... man muss MS zugute halten, dass sie sich da richtig reingehängt habem. Wenn man eine in deutsch erstellte Datei mit einem englischen Excel öffnet, dann wird das automatisch übersetzt. Das klappt schon.
ps: Wir selbst verwenden leider in vielen Fällen auch noch deutsche Begriffe, aber jede neu entwickelte Software ist rein englisch.
Klingt wie dein Domaenentyp, bin ich dabei. Aber Integer ist final, muss man auf Number aufbauen (habe ich schonmal erwaehnt dass ich final nicht leiden kann?).
Aber ... man muss MS zugute halten, dass sie sich da richtig reingehängt habem. Wenn man eine in deutsch erstellte Datei mit einem englischen Excel öffnet, dann wird das automatisch übersetzt. Das klappt schon.
Nachdem wir 9 Sprachen bedienen und auch in Australien und Südafrika tätig sind, (ein paar Programmierer sitzen auch in Dubai) ist das nicht zu empfehlen. Und ich finds's auch angenehmer, den Code in einer Sprache zu haben anstatt in 2, Java selbst und extern eingebundene Libraries sind ja auch in Englisch gehalten.
Aber wir müssen ja nicht einer Meinung sein
Was Excel angeht, mag ich mich auch falsch zurückerinnern, vielleicht ging's da um die Kommandos in den Zellen. Aber ich glaub, die VBA-Makros wurden übersetzt. So oft hatte ich nicht die Gelegenheit. Ich wurde jedenfalls sehr positiv überrascht.
Nachdem wir 9 Sprachen bedienen und auch in Australien und Südafrika tätig sind, (ein paar Programmierer sitzen auch in Dubai) ist das nicht zu empfehlen.
Ja dann ist die Domaene aber auch Englisch. Was ich meinte ist, wenn ihr jetzt, zum Beispiel, Software fuer deutsche Apotheken macht, die mit Daten befeuert wird wo alle Felder und alle Bezeichner Deutsch sind, mit deutschen Vorschriften und deutscher Oberflaeche. Und dann alles auf Englisch zu uebersetzen nur weil Englisch, ist Hoelle.
Was Excel angeht, mag ich mich auch falsch zurückerinnern, vielleicht ging's da um die Kommandos in den Zellen. Aber ich glaub, die VBA-Makros wurden übersetzt. So oft hatte ich nicht die Gelegenheit. Ich wurde jedenfalls sehr positiv überrascht.
Ja, ich meine das Makros nicht uebersetzt werden, soweit ich mich erinnere. Aber wie gesagt, kann ich auch falsch liegen, ich versuche mich aus der Ecke rauszuhalten so gut ich kann.