Talvez eu precise mudar para Java para novo projeto. Eu tenho muito pouco conhecimento sobre Java, porque estudei e usei C # principalmente, e tenho medo das diferenças entre essas duas linguagens / plataformas que provavelmente me causarão muitos problemas.
Quais são as armadilhas / dicas que eu deveria me preocupar?
Respostas:
Aqui estão algumas dicas importantes sobre Java quando provenientes do C #:
switch
casos podem passar silenciosamente para o próximo, portanto, sempre coloque semprebreak
que apropriado. Você também não podeswitch
emString
em Java.List<int>
, apenas aList<Integer>
. A caixa automática oculta a verbosidade, mas você pode obterNullPointerException
ao desmarcar anull
. Além disso,==
e!=
em dois tipos primitivos in a box realizam comparação de referência.==
e!=
em dois tipos de referência (por exemploString
) são sempre comparação de referênciaint
pode ser autoboxado para umInteger
; não há autoboxing deint[]
paraInteger[]
.byte
,short
,int
,long
só são assinados. Preste atenção na extensão de sinal não intencional.sub*
métodos de consulta à distância usa o limite inferior inclusivo e o limite 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)
Veja também
Perguntas relacionadas
Em alguns tópicos listados acima:
new Integer(i) == i
em Java? (SIM!)==
/!=
), ocorre o desbloqueio automático? (NÃO!)int num = Integer.getInteger("123")
jogarNullPointerException
? (!!!)Em dicas gerais sobre Java:
fonte
Uma armadilha óbvia é comparar seqüências de caracteres com o estilo C #
string1 == string2
(Java compara apenas referências) em vez do estilo Javastring1.equals(string2)
.Outro
private
é o modificador de acesso padrão em C #,package
em Java.Também
ToString()
métodos não são localizados automaticamente pela cultura atual em Java.fonte
O que me deu as args de substring Java é beginIndex, endIndex, enquanto C # Subtring args são startIndex , length. Isso é suficiente para torná-lo irritante e uma boa probabilidade de obter o índice fora dos limites de qualquer maneira que você alternar.
fonte
Hum.
fonte
fonte
A maior meta-armadilha é assumir que a linguagem e as bibliotecas Java se comportam da mesma maneira que as coisas de aparência semelhante em C #. Faça os tutoriais, leia os javadocs, não assuma ...
Outra meta-armadilha é supor que o fato de que você pode fazer algo em Java da mesma maneira tão fácil / agradável quanto possível / possível em C #. Não é verdade. Java é uma linguagem muito mais antiga e erros foram cometidos ...
E a última meta-armadilha é pensar que reclamar sobre coisas que estão faltando / diferentes no Java on SO fornecerá respostas universalmente solidárias / solidárias!
fonte
Cuidado com as diferenças nos modificadores de acesso padrão. Observe também que todos os métodos não estáticos em Java são virtuais (a menos que você os marque como finais).
Embora esteja um pouco desatualizado, achei uma ótima referência.
Comparação de C # e Java, por Dare Obasanjo
fonte
Also note that all non-static methods in Java are virtual.
Como eu queria C # foi assim tambémdepende de que tipo de programa você está trabalhando. A Wikipedia possui este artigo e é bastante extenso. (verifique também a seção "links externos" no final) http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp .
Além disso, li este artigo quando mudei de C # para Java http://www.25hoursaday.com/CsharpVsJava.html e foi muito útil.
fonte
Eu acho que sua pergunta é subjetiva. Tudo não pode ser explicado aqui. Eu sugiro que você leia Java Puzzlers , By
Joshua Bloch and Neal Gafter
. Você pode aprender mais e se proteger das armadilhas.fonte
Na linguagem Java, os equivalentes objetivos de tipos primitivos, como int, char, não são "tipos de valor" (por exemplo, Inteiro é um tipo de referência). Em C #, o System.Int32 é uma estrutura.
fonte