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