Ответ 1
Вы задаете несколько вопросов одновременно. Позвольте мне обратиться к ним отдельно:
Насколько похожи Java и С#?
И С#, и Java использовали C/C++ (и Objective C, и другие) для определения их синтаксиса. И оба они скомпилированы на промежуточный язык.
Это общее происхождение делает языки похожими на многих уровнях, так что код на одном языке может быть перепутан с другим новичками; а также делает среду выполнения несколько сопоставимой. Однако существуют существенные различия как в принципах проектирования, так и в том, как развивался каждый язык, что делает работу с каждым совершенно разной; Вот самые выдающиеся из них:
На уровне синтаксиса Java находилась под влиянием Smalltalk, в то время как С# пытался оставаться ближе к C/C++ (например: сравнивать Java extends
и implements
с помощью С# :
нотация) и получил смутное вдохновение от VB на тех концепциях, которые не сопоставляется с C/C++ (пример: синтаксис свойства).
По уровню функциональности С# 1 определенно был близок к Java. Среди немногих различий я бы выделил поддержку С# для "небезопасного" кода (включая указатели) и для делегатов; и спорные throws
Java. Это имеет смысл, поскольку одной из целей С# было стать альтернативой Java.
Многие языковые функции сильно различаются по деталям реализации. Например, перечисления очень C'ish на С#, но являются полными объектами в Java; или дженерики реализованы на уровне IL в С#, но в Java обрабатываются с помощью стирания типов (ни один из них не очень похож на шаблоны C++, кроме синтаксиса).
На уровне API они - разные миры. С# опирается на .Net Framework, который был основан на опыте Microsoft с семейством продуктов Visual Studio (и, следовательно, в значительной степени ориентирован на Windows), в то время как библиотека классов Java была создана, IIRC, с нуля и сильно развивалась с течением времени (в в эти дни свинга кто-нибудь помнит AWT?
Наконец, стоит упомянуть, что у каждого из этих языков есть свои идиомы, и за ним стоит свое сообщество сторонников.
Если я изучаю Java, изучаю ли С# почти бесплатно? Или наоборот?
Ни. Основное сходство - это основной синтаксис (точки с запятой, фигурные скобки, индексирование массива, чувствительность к регистру и т.д.), И вы уже получили его из C/C++.
Если бы мне пришлось выбирать только один из двух языков, что было бы лучше?
Краткий ответ: подбросьте монетку. Длинный ответ: это зависит от вашего стиля кодирования и от того, какие аспекты языка вы цените больше всего. Мой лучший совет - начать с изучения обоих, пока не почувствуете, что один из языков тянет вас сильнее, чем другой.
Кроме того, вы можете взглянуть на http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp.
Который имеет более широкий охват с точки зрения языка программирования?
Если вы имеете в виду встроенные функции языка, я бы сказал, что С# выигрывает с небольшим отрывом. Большинство функций, которые есть в С# и Java, - это синтаксический сахар (хотя вместе они существенно влияют на кривую обучения и способ использования языка). Я высоко ценю методы перегрузки и расширения оператора С#. Кроме того, LINQ - довольно интересная концепция, но по сути это декларативный синтаксис для циклов.
Надеюсь это поможет.