Java e C#
Característica Implementação
Inspirado no C/C++ Boa parte da sintaxe de ambas as linguagens foi inspirada no C/C++, especialmente declaração de variáveis, funções e estruturas de controle.
Orientação a objetos Ambas as linguagens suportam conceitos de programação orientada a objetos com a palavra reservada class.
Herança Herança simples de classes a partir de ancestral comum e herança múltipla de interfaces.
Gerenciamento de memória Automático, com “coletor de lixo”.
Tipagem forte Todas as atribuições tem os tipos validados. Os “casts” são sempre verificados em tempo de execução. Não é possível violar o sistema de tipos.
Compila para código intermediário Sim. No caso da Microsoft compila para “Intermediate Language” e no Java para “bytecode”.
Tratamento de erro Exceptions.
Reflections Ambas as linguagens suportam “reflections”.
Unicode Ambas as linguagens usam o padrão Unicode para representar caracteres e strings.
Classe que não pode ser herdada “final” em Java; “sealed” em C#.
Campo constante “static final” em Java; “const” em C#.
Operador que verifica compatibilidade de tipos “instanceof” em Java; “is” em C#.
Java
Desvantagens
A pré-compilação exige tempo, o que faz com que programas Java demorem um tempo significativamente maior para começarem a funcionar. Isso não é um grande problema para programas que rodam em servidores. No entanto isso pode ser bastante indesejável para computadores pessoais.
O padrão Java tem uma especificação rígida de como devem funcionar os tipos numéricos. Essa especificação não condiz com a implementação de pontos flutuantes na maioria dos processadores o que faz com que o Java seja significativamente mais lento para aplicações que utilizem bastante processamento numérico quando comparado a outras linguagens.
Lembrando que as desvantagens de Java em relação à performance não significam que suas aplicações sejam lentas ao ponto de não serem viáveis para utilização em