Я просто хочу уточнить одну вещь. Это не вопрос, по которому лучше, ту часть, которую я оставляю кому-то еще для обсуждения. Мне все равно. Мне задавали этот вопрос на собеседовании, и я подумал, что было бы полезно узнать немного больше.
Вот те, которые я мог придумать:
- Java "независима от платформы". Ну, в настоящее время можно сказать, что есть проект Mono, поэтому C # тоже можно рассмотреть, но я считаю, что это немного преувеличивает. Зачем? Что ж, когда будет выпущен новый выпуск Java, он будет одновременно доступен на всех платформах, которые он поддерживает, с другой стороны, сколько функций C # 3.0 все еще отсутствует в реализации Mono? Или это действительно CLR против JRE, что мы должны сравнить здесь?
- Java не поддерживает события и делегаты. Насколько я знаю.
- В Java все методы являются виртуальными
- Инструменты разработки: я считаю, что такого инструмента, как Visual Studio, пока нет. Особенно, если вы работали с командными изданиями, вы поймете, что я имею в виду.
Пожалуйста, добавьте другие, которые вы считаете актуальными.
Обновление: Просто всплыло у меня в голове, у Java нет чего-то вроде пользовательских атрибутов в классах, методах и т. Д. Или так?
Ответы:
Сравнение Java 7 и C # 3
(Некоторые функции Java 7 здесь не упомянуты, но
using
преимущество операторов всех версий C # по сравнению с Java 1-6 было удалено.)Не все ваше резюме верно:
Помимо этого (и что уже в вашем резюме):
List<byte>
в качествеbyte[]
поддержки, а не в виде массива байтов в штучной упаковке).ref
иout
для передачи параметров по ссылкеЭто не является исчерпывающим, но охватывает все, что я могу придумать.
источник
Далее дан большой справочник Dare Obasanjo о различиях между C # и Java. Я всегда обращаюсь к этой статье, когда переключаюсь между ними.
http://www.25hoursaday.com/CsharpVsJava.html
источник
TimeDate
класс, чтобы всегда иметь время, и еще не успел :(C # имеет автоматические свойства, которые невероятно удобны, и они также помогают поддерживать чистоту вашего кода, по крайней мере, когда у вас нет специальной логики в ваших методах получения и установки.
источник
Особенности C # Отсутствуют в Java • C # включает в себя больше примитивных типов и функциональность для отлова арифметических исключений.
• Включает большое количество нотационных удобств в Java, многие из которых, такие как перегрузка операторов и пользовательские преобразования, уже знакомы большому сообществу программистов на C ++.
• Обработка событий - это «гражданин первого класса» - это часть самого языка.
• Позволяет определить «структуры», которые похожи на классы, но могут быть размещены в стеке (в отличие от экземпляров классов в C # и Java).
• C # реализует свойства как часть синтаксиса языка.
• C # позволяет операторам switch работать со строками.
• C # позволяет анонимные методы, обеспечивающие закрытие функциональности.
• C # позволяет итератору, который использует сопрограммы через ключевое слово yield функционального стиля.
• C # имеет поддержку выходных параметров, способствуя возвращению нескольких значений, что является общим для C ++ и SQL.
• C # может псевдоним пространства имен.
• C # имеет «Явную реализацию члена», которая позволяет классу специально реализовывать методы интерфейса, отдельно от своих собственных методов класса. Это также позволяет реализовать два разных интерфейса, которые имеют метод с одинаковым именем. Методы интерфейса не должны быть публичными; их можно сделать доступными только через этот интерфейс.
• C # обеспечивает интеграцию с COM.
• Следуя примеру C и C ++, C # позволяет вызывать по ссылке для примитивных и ссылочных типов.
Особенности Java отсутствуют в C #
• Ключевое слово Java StrongFP гарантирует, что результат операций с плавающей запятой остается неизменным на разных платформах.
• Java поддерживает проверенные исключения для лучшего обеспечения отслеживания и обработки ошибок.
источник
Еще один хороший ресурс - http://www.javacamp.org/javavscsharp/ этом сайте приведено множество примеров, иллюстрирующих почти все различия между этими двумя языками программирования.
Что касается атрибутов, Java имеет аннотации, которые работают почти так же.
источник
Обобщения:
В случае с обобщениями Java вы фактически не получаете той эффективности выполнения, которую вы получаете с .NET, потому что, когда вы компилируете обобщенный класс в Java, компилятор забирает параметр типа и везде заменяет объект. Например, если у вас есть
Foo<T>
класс, компилятор Java генерирует байт-код, как если бы он былFoo<Object>
. Это означает, что кастинг, а также бокс / распаковка должны выполняться в фоновом режиме.Я уже некоторое время играю с Java / C #, и, на мой взгляд, основное различие на уровне языка - это, как вы указали, делегаты.
источник
Пожалуйста, перейдите по ссылке, приведенной ниже msdn.microsoft.com/en-us/library/ms836794.aspx Он охватывает как сходство, так и разницу между C # и Java
источник