Je vais peut-être devoir passer à Java pour un nouveau projet. J'ai très peu de connaissances sur Java, car j'ai principalement étudié et utilisé le C #, et j'ai peur que les différences entre ces deux langages / plateformes ne me causent de nombreux problèmes.
Quels sont les pièges / pièges dont je devrais me soucier?
Réponses:
Voici quelques pièges Java importants en provenance de C #:
switch
cas peuvent passer silencieusement au suivant, alors assurez-vous de toujours les mettrebreak
chaque fois que cela est approprié. Vous pouvez pas non plusswitch
surString
Java.List<int>
, seulement unList<Integer>
. La boîte automatique masque la verbosité, mais vous pouvez l'obtenirNullPointerException
lors du déballagenull
. En outre,==
et!=
sur deux types primitifs encadrés, effectuez une comparaison de référence.==
et!=
sur deux types de référence (par exempleString
) sont toujours la comparaison de référenceint
peut être placé automatiquement dans unInteger
; il n'y a pas de boîte automatique deint[]
àInteger[]
.byte
,short
,int
,long
sont signés seulement. Surveillez l'extension de signe involontaire.sub*
des méthodes de requête à distance utilisent une borne inférieure inclusive et une borne supérieure exclusiveString.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)
Voir également
Questions connexes
Sur certains sujets énumérés ci-dessus:
new Integer(i) == i
en Java? (OUI!)==
/!=
), la décompression automatique se produit-elle? (NON!)int num = Integer.getInteger("123")
jetteNullPointerException
? (!!!)Sur les pièges Java généraux:
la source
Un écueil évident consiste à comparer les chaînes avec le style C #
string1 == string2
(Java compare uniquement les références) au lieu du style Javastring1.equals(string2)
.Un autre est que
private
c'est le modificateur d'accès par défaut en C #,package
en Java.De plus, les
ToString()
méthodes ne sont pas automatiquement localisées par la culture actuelle en Java.la source
Celui qui m'a obtenu était les arguments de sous-chaîne Java sont beginIndex, endIndex tandis que les arguments de sous-chaîne C # sont startIndex, longueur. C'est assez de différence pour le rendre ennuyeux et une bonne probabilité de sortir l'index hors des limites dans les deux cas.
la source
Hm.
la source
la source
Le plus grand méta-écueil est de supposer que le langage Java et les bibliothèques se comportent de la même manière que des éléments d'aspect similaire en C #. Faites les tutoriels, lisez les javadocs, ne partez pas du principe ...
Un autre méta-écueil consiste à supposer que le fait que vous puissiez faire quelque chose en Java aussi facilement / joliment que vous pouvez / pourriez en C #. Ce n'est pas vrai. Java est un langage beaucoup plus ancien, et des erreurs ont été commises ...
Et le dernier méta-écueil est de penser que se plaindre de choses manquantes / différentes dans Java sur SO vous donnera des réponses universellement sympathiques / favorables!
la source
Méfiez-vous des différences dans les modificateurs d'accès par défaut. Notez également que toutes les méthodes non statiques de Java sont virtuelles (sauf si vous les marquez comme finales).
Bien qu'il soit quelque peu dépassé, j'ai trouvé que c'était une excellente référence.
Comparaison de C # et Java, par Dare Obasanjo
la source
Also note that all non-static methods in Java are virtual.
Comment j'aimerais que C # soit comme ça aussidépend du type de programme sur lequel vous travaillez. Wikipedia a cet article et il est assez complet. (consultez également la section "liens externes" à la fin) http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp .
De plus, j'ai lu cet article lorsque je suis passé de C # à Java http://www.25hoursaday.com/CsharpVsJava.html et il a été très utile.
la source
Je pense que votre question est subjective. Tout ne peut pas être expliqué ici. Je vous suggère de lire Java Puzzlers , By
Joshua Bloch and Neal Gafter
. Vous pouvez en savoir plus et être à l'abri des pièges.la source
En langage Java, les équivalents objectifs des types primitifs tels que int, char, ne sont pas des "types de valeur" (par exemple, Integer est un type de référence). En C #, System.Int32 est une structure.
la source