Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
Его Правительские Звания
104 / 84 / 29
Регистрация: 13.07.2017
Сообщений: 1,870
Записей в блоге: 3
1

Какие преимущества у Java перед C#?

11.10.2020, 11:42. Просмотров 3442. Ответов 6
Метки нет (Все метки)

Я умышленно создаю тему в разделе по Жабе, чтобы увидеть мнение программистов на этом языке. Недостатки, как для меня, очевидны, даже если опустить "синтаксический сахар", хотя без некоторых видов сахара, таких как LINQ, очень тяжело. Но пусть. Одинаково вот далеко не полный список:
1. Отсутствие интегрированности. С Шарпом все просто - установил Visual Studio и никаких проблем, там и .NET Framework в комплекте, и SDK, и все, что надо. А здесь надо сначала установить какую-то среду выполнения, называемую на сайте Oracle просто "Java", затем JDK, затем IDE, а ее Oracle не предлагает, нужно искать в другом месте, а еще следить, чтобы во всех трех продуктах версии совпадали и т. д. Я, например, скачав и установив все, еще 40 минут мучался, прежде чем скомпилировать и запустить проект.
2. Преимущество в виде кроссплатформенности с появлением .NET Core аннулировано, эта платформа также работает под разными операционными системами.
3. То, что "Жаба быстрее", проявляется далеко не всегда. Вот четыре примера:
C#
1
2
3
4
5
6
7
8
9
10
            DateTime time1 = DateTime.Now;
            int[] numbers = new int[200000000];
            DateTime time2 = DateTime.Now;
            for (int i = 0; i < 200000000; i++)
            {
                numbers[i] = i * i * i;
            }
            DateTime time3 = DateTime.Now;
            Console.WriteLine((time2 - time1).TotalMilliseconds);
            Console.WriteLine((time3 - time2).TotalMilliseconds);
27
1038
Java
1
2
3
4
5
6
7
8
9
10
        long time1 = System.currentTimeMillis();
        int[] numbers = new int[200000000];
        long time2 = System.currentTimeMillis();
        for (int i = 0; i < 200000000; i++)
        {
            numbers[i] = i * i * i;
        }
        long time3 = System.currentTimeMillis();
        System.out.println(time2 - time1);
        System.out.println(time3 - time2);
406
143
Тут действительно Жаба примерно в два раза быстрее.
C#
1
2
3
4
5
6
7
8
9
10
            DateTime time1 = DateTime.Now;
            List<int> numbers = new List<int>(200000000);
            DateTime time2 = DateTime.Now;
            for (int i = 0; i < 200000000; i++)
            {
                numbers.Add(i * i * i);
            }
            DateTime time3 = DateTime.Now;
            Console.WriteLine((time2 - time1).TotalMilliseconds);
            Console.WriteLine((time3 - time2).TotalMilliseconds);
13
1600
Java
1
2
3
4
5
6
7
8
9
10
        long time1 = System.currentTimeMillis();
        Vector<Integer> numbers = new Vector<Integer>(200000000);
        long time2 = System.currentTimeMillis();
        for (int i = 0; i < 200000000; i++)
        {
            numbers.add(i * i * i);
        }
        long time3 = System.currentTimeMillis();
        System.out.println(time2 - time1);
        System.out.println(time3 - time2);
java.lang.OutOfMemoryError
Но прежде чем эта ошибка вылетела, прошло явно намного больше, чем 1613 миллисекунд, да и на объеме в 100 миллионов Жаба была существенно медленнее. Вывод - когда Жабе удобно, она быстрее, как только стало немного неудобно - сразу пасует. Ну можно там спорить, что Vector - очень медленная коллекция и т. д. Ну допустим, Жаба быстрее. Но C++ еще быстрее, а язык машинных кодов - так вообще сказочно быстрый. Но удобство изменяется обратно пропорционально скорости. А вместе с удобством и скорость написания программы. А мне кажется, любому нормальному программисту лучше писать программу полчаса и выполнять минуту, чем писать месяц и выполнять 5 секунд. Ну, если это программа, где требуется реагировать в течение наносекунд, то можно и пожертвовать временем написания, но тогда и Жаба в ауте. А если это среднестатистическое десктопное приложение, то его удобнее всего писать на максимально высокоуровневом языке. Уверен, что и Шарп - не навеки, но в данный момент по данному пункту он в лидерах.
4. Частично уже затронул это в предыдущем пункте. Несоизмеримо большее потребление памяти из-за того, что в Жабе нет коллекций примитивных типов. Например, список из 100 миллионов байт в Шарпе около 100 миллионов байт и займет (плюс служебная информация - несколько десятков байт), а в Жабе - 2.1 миллиарда байт (так как над каждым байтом необходимо создавать объектную обертку). Как вы считаете, это не перебор?
5. Отсутствие беззнаковых целых типов. В инструкциях всех нормальных процессоров они есть, а в Жабе нет?! И это - не "сахар", а серьезная проблема. Остается только догадываться, как здесь реализован BigInteger...
6. Отсутствие констант времени компиляции, которые во время выполнения заменяются своим текстом. Есть сочетание модификаторов static и final, дающее тот же эффект, что и константа, но развертываются такие "константы" не во время компиляции.
7. Отсутствие свойств и особенно индексаторов. Возможно, это и "сахар", но я не представляю себе программирование без этого. Пользоваться вместо list[i] = 100; громоздкой и неочевидной конструкцией list.set(i, 100); или еще хуже - list.setElementAt(100, i);? Ну, если университет требует, я могу в это поиграть, но точно, что не для профессионального программирования.
8. Отсутствие выходных параметров у функций. Это точно не "сахар", так как, хоть это и не соответствует положениям "чистого кода", но иногда без этого просто никак.
9. Отсутствие типа decimal. Это значит - все финансовые дела на Жабе решать нельзя. (Есть java.math.BigDecimal, но это не то же самое.)
10. Невозможность переменной перечисляемого типа со значением набора констант. Можно сделать набор перечислений, но сколько же это потребует ресурсов!
11. Отсутствие перегрузки операторов (No comments).
12. Отсутствие многомерных массивов (No comments).
Замеченных мной преимуществ существенно меньше, и они существенно менее значимые:
1. Большинство внешних конструкций на Жабе имеют открытый исходный код. Но большинству программистов он не нужен.
2. Возможность выйти из вложенных циклов без использования "плохого" оператора goto.
3. Говорят, намного труднее декомпиляция, но лично я не сравнивал.
4. Являются ли преимуществом или недостатком проверяемые исключения, вопрос спорный.
Повторюсь, все вышеперечисленное без учета LINQ и прочего явного "сахара", а если его учесть, количество преимуществ Шарпа перевалит за сотню.
Возможно, моя позиция предвзятая, поэтому я и хочу увидеть позицию программистов на Java. Прошу не разводить холивар, а написать конкретно и по сути - название конструкции, где применяется и почему лучше, чем в Шарпе. Пока что я не вижу существенных преимуществ Жабы, поэтому программирую на Шарпе и горжусь этим.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2020, 11:42
Ответы с готовыми решениями:

Какие преимущества в .NET 5 будут перед Java?
В ноябре выходит .NET 5 и в сети уже гуляет байка от том, что Java серьёзно просядет по вакансиям и...

Какие преимущества у программы SolidWorks - перед Компас3Д и Автокад ?
Здравствуйте, дорогие специалисты. Объясните пожалуйста - какие преимущества у программы...

Какие преимущества у приложения на Android перед Web приложением
Какие преимущества у приложения на Android перед Web приложением? Спасибо за внимание!

В чем преимущества Java перед php?
Если продублировал тему, прощу прощенья. Но нового и актуального за последние пару лет ничего не...

6
Модератор
1425 / 425 / 140
Регистрация: 11.08.2017
Сообщений: 1,445
11.10.2020, 12:38 2
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Пока что я не вижу существенных преимуществ Жабы, поэтому программирую на Шарпе и горжусь этим.
Ага, ага не холиварная тема. Есть все посылы...

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
12. Отсутствие многомерных массивов (No comments).
большего бреда не читал

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
1. Отсутствие интегрированности. С Шарпом все просто - установил Visual Studio и никаких проблем, там и .NET Framework в комплекте, и SDK, и все, что надо.
вместе со студией комп замусорится что аж мама не горюй, там поставится куча всего на десяток другой гигов и полсотни программ. когда в джаве можно обойтись всего в несколько сотен мегабайт. то что ты чего-то не сумел не делает язык плохим. я например сколько не пытался не сумел на шарпе программу собрать так чтобы она смогла запуститься на другом компе, когда на джаве можно без проблем создать полностью портативную сборку которая будет работать почти везде

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Большинство внешних конструкций на Жабе имеют открытый исходный код. Но большинству программистов он не нужен.
вот это спорное замечание, открытый исходный код всегда плюс, да и на нормальном языке (я про с++) почти все библиотеки надо собирать руками из исходников.

шарп это язык корпорации зла и это много объясняет))

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
3. Говорят, намного труднее декомпиляция, но лично я не сравнивал.
вот с этим соглашусь, на джаве декомпилированный файл нуждается почти в полном переписывании а в шарпе можно почти сразу использовать

для меня сейчас единственный минус джавы так это отсутствие полноценной компиляции в нативы, но раз нужны нативы то логичней выбрать другой язык, так что это не минус можно сказать

теме место в холиварах, вряд ли кто тут будет чтото доказывать, нормальным людям это не надо и такие темы всегда будут воспринимать как начала войн между языками
1
Его Правительские Звания
104 / 84 / 29
Регистрация: 13.07.2017
Сообщений: 1,870
Записей в блоге: 3
11.10.2020, 13:02  [ТС] 3
Цитата Сообщение от alecss131 Посмотреть сообщение
большего бреда не читал
В чем бред? В Жабе есть только массивы массивов в периоде, а в Шарпе - НАСТОЯЩИЕ многомерные массивы (имеющие форму прямоугольного гиперпараллелепипеда, а не зубчатые).
Цитата Сообщение от alecss131 Посмотреть сообщение
да и на нормальном языке (я про с++)
C++ - это язык, который с самого начала создавался как "высокоуровневый ассемблер", он сравниваться с истинно высокоуровневыми языками не может по определению.
Цитата Сообщение от alecss131 Посмотреть сообщение
шарп это язык корпорации зла
А прямо в Oracle работают одни ангелы? Мне кажется, и там, и там - обычные люди, среди которых есть как добрые, так и злые по своей натуре, но на качество языков это не влияет.
0
2888 / 2464 / 761
Регистрация: 05.07.2013
Сообщений: 11,915
11.10.2020, 13:32 4
Лучший ответ Сообщение было отмечено reisal78 как решение

Решение

Плюсов нет, пиши на шаре, гордись /тхреад
1
3251 / 2314 / 421
Регистрация: 28.04.2012
Сообщений: 7,713
12.10.2020, 10:03 5
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
В чем бред? В Жабе есть только массивы массивов в периоде, а в Шарпе - НАСТОЯЩИЕ многомерные массивы (имеющие форму прямоугольного гиперпараллелепипеда, а не зубчатые).
Например?

Java
1
int[][] foo = new int[10][20];
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Это значит - все финансовые дела на Жабе решать нельзя.
Пойди расскажи это банкам и прочим финтех-компаниям.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Есть java.math.BigDecimal, но это не то же самое.
В чём отличия?

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Невозможность переменной перечисляемого типа со значением набора констант. Можно сделать набор перечислений, но сколько же это потребует ресурсов!
Ты про EnumSet и EnumMap?

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Отсутствие многомерных массивов (No comments).
Например?

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Но большинству программистов он не нужен.
Ты какой-то опрос проводил?

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
а написать конкретно и по сути - название конструкции, где применяется и почему лучше, чем в Шарпе.
Конкретно: отлаженыый и оптимизированный годами рантайм с множеством тонких настроек под разные production-окружения, например возможность выбора GC. В Шарпе можно выбрать GC?

Добавлено через 1 час 16 минут
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
C++ - это язык, который с самого начала создавался как "высокоуровневый ассемблер", он сравниваться с истинно высокоуровневыми языками не может по определению.
О, это тебе нужно пойти в раздел по C++ и там создать тему с таким сообщением. Не для холивара, конечно.

Добавлено через 17 минут
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Остается только догадываться, как здесь реализован BigInteger...
Зачем гадать, если можно посмотреть исходник?
2
Эксперт Java
2359 / 2189 / 558
Регистрация: 28.12.2010
Сообщений: 8,566
12.10.2020, 10:41 6
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Вот четыре примера:
щас бы устраивать перформанс тесты не имея о них никакого понятия....

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Остается только догадываться, как здесь реализован BigInteger.
можно сорсы посмотреть если очень интересно

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
list.setElementAt(100, i);? Ну, если университет требует, я могу в это поиграть, но точно, что не для профессионального программирования.
за много лет вот ни разу не понадобилась подобная конструкция, но в целом Джава довольно многословна это да.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Это значит - все финансовые дела на Жабе решать нельзя.
рукалицо жеж

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Я, например, скачав и установив все, еще 40 минут мучался, прежде чем скомпилировать и запустить проект.
IDEA + JDK (неважно какой версии). Больше ничего не требуется.

Я так же могу сказать про C#. Как-то понадобилось написать небольшой код. Запустить хеллоу ворлд смог только часа через 1.5 это при том что в универе писал когда-то на нем. Вопрос навыков

В целом на джава для любой задачи обычно уже есть готовая библиотека и есть maven, который эту библиотеку позволяет добавить за 3 строки конфигурации.
Есть большое коммьюнити, где на любой вопрос уже есть ответ
Много решений написаны на джава поэтому их интеграция проходит намного легче.

Возможно мне попадались криворукие люди, но любые решения, с которыми мне приходилось интегрироваться на .NET и ему подобных, были полны багов, и очень трудно поддавались изменениям
2
107 / 217 / 10
Регистрация: 21.06.2019
Сообщений: 1,116
12.10.2020, 16:36 7
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Отсутствие интегрированности.
Все настраивается за полчаса, если знать что делать. Ну а если не знать, то никакой сишарп не поможет.
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
То, что "Жаба быстрее", проявляется далеко не всегда.
Да начхать. 95% области применения жабы - всякие веб-сервисы, перекладывающие данные из одного места в другое. Там различия в производительности будут совершенно незаметны, потому что основные тормоза будут уходить на сетевое взаимодействие и ожидание ответов. А ни в embedded, ни где бы то ни было где нужна производительность жабу никто не использует. И сишарп кстати тоже.
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Но C++ еще быстрее, а язык машинных кодов - так вообще сказочно быстрый.
Именно поэтому он или С и применяются там, где нужна производительность вычислений.
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Отсутствие типа decimal. Это значит - все финансовые дела на Жабе решать нельзя.
Ага, поэтому многие банки и околобанковские конторы и сидят плотно на жабе Юзают BigDecimal и не парятся, хоть это и выглядит убого.
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
А если это среднестатистическое десктопное приложение, то его удобнее всего писать на максимально высокоуровневом языке. Уверен, что и Шарп - не навеки, но в данный момент по данному пункту он в лидерах.
Так на жабе никто десктопы и не пишет, а те, кто пытались - давно перестали.
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
12. Отсутствие многомерных массивов (No comments).
А есть разница с массивами массивов?
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
. Большинство внешних конструкций на Жабе имеют открытый исходный код. Но большинству программистов он не нужен.
Ну вы вот спрашиваете, как устроет BigInteger и BigDecimal, значит вам нужен?
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Пока что я не вижу существенных преимуществ Жабы, поэтому программирую на Шарпе и горжусь этим.
И не увидите, потому что сишарп и вся дотнет платформа - целиком и полностью скопирована мелкомягкими с жабы после того, как им запретили выпускать свою не совместимую ни с кем жабу. Ну а поскольку у них уже была перед глазами жаба, то они и пофиксили некоторые ее косяки, которые в жабе нельзя или очень сложно починить из-за обратной совместимости.

Добавлено через 5 минут
Вообще же, жаба сама по себе убога чуть менее, чем полностью, из-за крайне примитивного синтаксиса. Потому ни для чего кроме как погонять данные практически и не применяется. Но на жвм есть другие языки, которые гораздо поприятнее жабы - скала например, или котлин.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
и горжусь этим
А гордиться надо знанием фундаментальных независимых от языка основ CS, а не знанием конкретного языка.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2020, 16:36

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Какие можно выделить преимущества C# относительно языков C++, java в рамках разработки мессенджера?
Какие можно выделить преимущества C# относительно языков C++, java в рамках разработки довольно...

Преимущества 12.10 перед 12.04
Нестабильности в 10ке не заметил... А в плане производительности как???

34 преимущества кирпича перед пистолетом
Взял где-то с простор интернета. 1. Кирпич дешев. 2. Кирпич доступен. 3. Hа кирпич не нужно...

Преимущества ASP.NET перед JOOMLA
Поясните на понятном языке какая разница и в чём преимущества между созданием сайтов ...

Есть ли в MySql преимущества перед файлами?
Я планирую начать разрабатывать социальную сеть узкой направленности. Сейчас проектирование дошло...

Преимущества ActiveRecord перед обычным MySQL
Ситуация такая. Делаю проект в yii и для работы с базой использую ActiveRecord. Cделал загрузку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.