Puede que tenga que cambiar a Java para un nuevo proyecto. Tengo muy poco conocimiento sobre Java, porque principalmente estudié y usé C #, y me temo que las diferencias entre estos dos lenguajes / plataformas probablemente me causen muchos problemas.
¿Cuáles son las trampas / problemas que me deberían importar?
Respuestas:
Estas son algunas trampas importantes de Java cuando viene de C #:
switch
casos pueden pasar silenciosamente al siguiente, así que asegúrese de poner siempre quebreak
sea apropiado. Tampoco se puedeswitch
enString
en Java.List<int>
, solo aList<Integer>
. Autoboxing oculta la verbosidad, pero se puede obtenerNullPointerException
al desempaquetar anull
. Además,==
y!=
en dos tipos primitivos en caja, se realiza una comparación de referencia.==
y!=
en dos tipos de referencia (pString
. ej. ) siempre hay comparación de referenciaint
se puede autoboxear a unInteger
; no hay autoboxing deint[]
aInteger[]
.byte
,short
,int
,long
sólo están firmados. Esté atento a la extensión de señal no deseada.sub*
métodos de consulta a distancia utilizan el límite inferior inclusivo y el límite superior exclusivoString.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)
Ver también
Preguntas relacionadas
Sobre algunos temas enumerados anteriormente:
new Integer(i) == i
en Java? (¡SI!)==
/!=
), ¿se produce el desempaquetado automático? (¡NO!)int num = Integer.getInteger("123")
tiraNullPointerException
? (!!!)En las trampas generales de Java:
fuente
Una trampa obvia es comparar cadenas con el estilo C #
string1 == string2
(Java solo compara referencias) en lugar del estilo Javastring1.equals(string2)
.Otro
private
es el modificador de acceso predeterminado en C #,package
en Java.Además, los
ToString()
métodos no están localizados automáticamente por la cultura actual en Java.fuente
El que me sorprendió fue que los argumentos de subcadena de Java son beginIndex, endIndex, mientras que los argumentos de subcadena de C # son startIndex, length. Esa es una diferencia suficiente para hacerlo molesto y una buena probabilidad de sacar el índice de los límites de cualquier manera que cambie.
fuente
Hm.
fuente
fuente
El mayor obstáculo es asumir que el lenguaje y las bibliotecas de Java se comportan de la misma manera que las cosas de aspecto similar en C #. Haz los tutoriales, lee los javadocs, no asumas ...
Otra meta-trampa es asumir que el hecho de que puede hacer algo en Java con la misma facilidad / amabilidad que puede / podría hacer en C #. No es verdad. Java es un lenguaje mucho más antiguo, y se cometieron errores ...
¡Y la última meta-trampa es pensar que quejarse de cosas faltantes / diferentes en Java en SO te dará respuestas comprensivas / de apoyo universalmente!
fuente
Tenga cuidado con las diferencias en los modificadores de acceso predeterminados. También tenga en cuenta que todos los métodos no estáticos en Java son virtuales (a menos que los marque como finales).
Aunque está algo desactualizado, he encontrado que esta es una gran referencia.
Comparación de C # y Java, por Dare Obasanjo
fuente
Also note that all non-static methods in Java are virtual.
Cómo me gustaría que C # fuera así tambiéndepende de qué tipo de programa estés trabajando. Wikipedia tiene este artículo y es bastante extenso. (también consulte la sección "enlaces externos" al final) http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp .
Además, leí este artículo cuando cambié de C # a Java http://www.25hoursaday.com/CsharpVsJava.html y fue muy útil.
fuente
Creo que tu pregunta es subjetiva. Todo no se puede explicar aquí. Te sugiero que leas Java Puzzlers , By
Joshua Bloch and Neal Gafter
. Puede aprender más y estar a salvo de las trampas.fuente
En el lenguaje Java, los equivalentes objetivos de los tipos primitivos, como int, char, no son "tipos de valor" (por ejemplo, Integer es un tipo de referencia). En C #, el System.Int32 es una estructura.
fuente