Eu só quero esclarecer uma coisa. Esta não é uma pergunta sobre qual é a melhor, que parte deixo para outra pessoa discutir. Eu não ligo para isso. Fiz essa pergunta na minha entrevista de emprego e achei que seria útil aprender um pouco mais.
Estes são os que eu poderia inventar:
- Java é "independente de plataforma". Hoje em dia você pode dizer que existe o projeto Mono , então o C # também pode ser considerado, mas acredito que é um pouco exagerado. Por quê? Bem, quando uma nova versão do Java é feita, ela está disponível simultaneamente em todas as plataformas suportadas, por outro lado, quantos recursos do C # 3.0 ainda estão faltando na implementação Mono? Ou é realmente CLR vs. JRE que devemos comparar aqui?
- Java não suporta eventos e delegados. Até onde sei.
- Em Java, todos os métodos são virtuais
- Ferramentas de desenvolvimento: acredito que ainda não existe uma ferramenta como o Visual Studio. Especialmente se você trabalhou com edições de equipe, saberá o que quero dizer.
Por favor, adicione outras pessoas que julgue relevantes.
Atualização: Apenas me veio à mente, o Java não tem algo como atributos personalizados em classes, métodos etc. Ou não?
Respostas:
Comparando Java 7 e C # 3
(Alguns recursos do Java 7 não são mencionados aqui, mas a
using
vantagem de todas as versões do C # sobre o Java 1-6 foi removida.)Nem todo o seu resumo está correto:
Além disso (e o que já está no seu resumo):
List<byte>
comobyte[]
backup, em vez de uma matriz de bytes em caixa).ref
eout
passa parâmetros por referênciaIsso não é exaustivo, mas abrange tudo o que consigo pensar de antemão.
fonte
A seguir, uma referência excelente e detalhada de Dare Obasanjo sobre as diferenças entre C # e Java. Sempre me pego me referindo a este artigo ao alternar entre os dois.
http://www.25hoursaday.com/CsharpVsJava.html
fonte
TimeDate
classe para sempre ter tempo e ainda não teve tempo :(O C # possui propriedades automáticas incrivelmente convenientes e também ajudam a manter seu código mais limpo, pelo menos quando você não possui lógica personalizada em seus getters e setters.
fonte
Recursos do C # ausentes em Java • O C # inclui tipos mais primitivos e a funcionalidade para capturar exceções aritméticas.
• Inclui um grande número de conveniências notacionais sobre Java, muitas das quais, como sobrecarga de operador e transmissões definidas pelo usuário, já são familiares à grande comunidade de programadores de C ++.
• A manipulação de eventos é um "cidadão de primeira classe" - faz parte do próprio idioma.
• Permite a definição de "estruturas", que são semelhantes às classes, mas podem ser alocadas na pilha (diferente das instâncias das classes em C # e Java).
• C # implementa propriedades como parte da sintaxe do idioma.
• C # permite que as instruções do switch operem em strings.
• C # permite métodos anônimos que fornecem a funcionalidade de fechamento.
• C # permite o iterador que emprega co-rotinas por meio de uma palavra-chave de rendimento no estilo funcional.
• O C # suporta parâmetros de saída, auxiliando no retorno de vários valores, um recurso compartilhado por C ++ e SQL.
• C # tem a capacidade de alias namespaces.
• O C # possui "Implementação explícita de membro", que permite que uma classe implemente especificamente métodos de uma interface, separados de seus próprios métodos de classe. Isso também permite implementar duas interfaces diferentes que possuem um método com o mesmo nome. Os métodos de uma interface não precisam ser públicos; eles podem ser feitos para serem acessíveis somente através dessa interface.
• C # fornece integração com o COM.
• Seguindo o exemplo de C e C ++, o C # permite chamadas por referência para tipos primitivos e de referência.
Recursos do Java ausente em C #
• A palavra-chave strictfp do Java garante que o resultado das operações de ponto flutuante permaneça o mesmo nas plataformas.
• Java suporta exceções verificadas para melhor aplicação da captura e tratamento de erros.
fonte
Outro bom recurso é http://www.javacamp.org/javavscsharp/ Este site enumera muitos exemplos que ilustram quase todas as diferenças entre essas duas linguagens de programação.
Sobre os atributos, o Java possui anotações, que funcionam quase da mesma maneira.
fonte
Genéricos:
Com os genéricos Java, na verdade, você não obtém a eficiência de execução obtida com o .NET porque, ao compilar uma classe genérica em Java, o compilador retira o parâmetro type e substitui Object em todos os lugares. Por exemplo, se você tem uma
Foo<T>
classe, o compilador java gera código de bytes como se fosseFoo<Object>
. Isso significa que a transmissão e também o boxe / unboxing deverão ser realizados em "plano de fundo".Eu jogo com Java / C # há algum tempo e, na minha opinião, a principal diferença no nível da linguagem é, como você apontou, delegados.
fonte
Acesse o link fornecido abaixo msdn.microsoft.com/en-us/library/ms836794.aspx Abrange a semelhança e a diferença entre c # e java
fonte