Ich muss möglicherweise für ein neues Projekt zu Java wechseln. Ich habe sehr wenig Kenntnisse über Java, da ich hauptsächlich C # studiert und verwendet habe und ich befürchte, dass die Unterschiede zwischen diesen beiden Sprachen / Plattformen mir wahrscheinlich viele Probleme bereiten könnten.
Welche Fallstricke / Fallstricke sollten mich interessieren?
Antworten:
Hier sind einige wichtige Java-Fallstricke, wenn Sie von C # kommen:
switch
Fälle stillschweigend zum nächsten durchfallen. Stellen Sie daher sicher, dass Sie sie immer dannbreak
eingeben , wenn dies angebracht ist. Sie können auch nichtswitch
aufString
in Java.List<int>
, nur eineList<Integer>
. Autoboxing verbirgt die Ausführlichkeit, aber Sie könnenNullPointerException
beim Auspacken eine bekommennull
. Führen Sie außerdem==
und!=
auf zwei primitiven Box-Typen einen Referenzvergleich durch.==
und!=
auf zwei Referenztypen (zBString
) immer Referenzvergleiche sindint
kann automatisch an einInteger
; Es gibt kein Autoboxing vonint[]
bisInteger[]
.byte
,short
,int
,long
nur unterzeichnet. Achten Sie auf unbeabsichtigte Zeichenerweiterung.sub*
Fernabfragemethoden verwenden inklusive Untergrenze und exklusive ObergrenzeString.substring(int beginIndex, int endIndex)
CharSequence.subSequence(int start, int end)
List.subList(int fromIndex, int toIndex)
SortedSet<E>.subSet(E fromElement, E toElement)
SortedMap<K,V>.subMap(K fromKey, K toKey)
Siehe auch
Verwandte Fragen
Zu einigen der oben aufgeführten Themen:
new Integer(i) == i
in Java garantiert ? (JA!)==
/!=
) ein automatisches Unboxing auf? (NEIN!)int num = Integer.getInteger("123")
wirftNullPointerException
? (!!!)Im Allgemeinen Java-Fallstricke:
quelle
Eine offensichtliche Gefahr besteht darin, Zeichenfolgen mit dem C # -Stil
string1 == string2
(Java vergleicht nur Referenzen) anstelle des Java-Stils zu vergleichenstring1.equals(string2)
.Ein weiterer
private
Grund ist der Standardzugriffsmodifikator in C #package
in Java.Auch
ToString()
Methoden werden von der aktuellen Kultur in Java nicht automatisch lokalisiert.quelle
Das, was mich dazu gebracht hat, war, dass Java- Teilzeichenfolgenargumente beginIndex und endIndex sind, während C # -Unterzeichenargumente startIndex und Länge sind. Das ist ein ausreichender Unterschied, um es ärgerlich zu machen, und eine gute Wahrscheinlichkeit, dass der Index bei jedem Wechsel aus den Grenzen gerät.
quelle
Hm.
quelle
quelle
Die größte Meta-Falle besteht darin, anzunehmen, dass sich die Java-Sprache und -Bibliotheken genauso verhalten wie ähnlich aussehende Inhalte in C #. Machen Sie die Tutorials, lesen Sie die Javadocs, nehmen Sie nicht an ...
Eine weitere Meta-Falle besteht darin, anzunehmen, dass Sie etwas in Java genauso einfach / schön tun können, wie Sie es in C # können / könnten. Es ist nicht wahr. Java ist eine viel ältere Sprache und es wurden Fehler gemacht ...
Und die letzte Meta-Falle besteht darin, zu glauben, dass Sie sich allgemein über sympathische / unterstützende Antworten freuen , wenn Sie sich über fehlende / andere Dinge in Java auf SO beschweren!
quelle
Beachten Sie die Unterschiede bei den Standardzugriffsmodifikatoren. Beachten Sie auch, dass alle nicht statischen Methoden in Java virtuell sind (es sei denn, Sie markieren sie als endgültig).
Obwohl es etwas veraltet ist, habe ich festgestellt, dass dies eine großartige Referenz ist.
Vergleich von C # und Java von Dare Obasanjo
quelle
Also note that all non-static methods in Java are virtual.
Wie ich wünschte, C # wäre auch sohängt davon ab, an welcher Art von Programm Sie arbeiten. Wikipedia hat diesen Artikel und er ist ziemlich umfangreich. (Lesen Sie auch den Abschnitt "Externe Links" am Ende.) http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp .
Außerdem habe ich diesen Artikel gelesen, als ich von C # zu Java gewechselt bin http://www.25hoursaday.com/CsharpVsJava.html und er war sehr nützlich.
quelle
Ich denke, deine Frage ist subjektiv. Hier kann nicht alles erklärt werden. Ich empfehle Ihnen, Java Puzzlers , By zu lesen
Joshua Bloch and Neal Gafter
. Sie können mehr lernen und vor Fallstricken sicher sein.quelle
In der Java-Sprache sind die objektiven Äquivalente primitiver Typen wie int, char keine "Werttypen" (z. B. Integer ist ein Referenztyp). In C # ist das System.Int32 eine Struktur.
quelle