Переход с C# на Java, какие "загвоздки" меня должны волновать?

Переход с C# на Java, какие "загвоздки" меня должны волновать?
Переход с C# на Java, какие "загвоздки" меня должны волновать? - hishahadat @ Unsplash

Вот некоторые важные проблемы Java при переходе от C#:

  • В Java случаи switch могут молча переходить в следующий, поэтому убедитесь, что вы всегда ставите break, когда это необходимо. Вы также не можете switch на String в Java.
  • Генерики не ретифицируются и параметризуются только ссылочными типами. Не существует List<int>, есть только List<Integer>. Автобоксинг скрывает многословие, но вы можете получить NullPointerException при распаковке null. Кроме того, == и != на двух боксированных примитивных типах выполняют сравнение ссылок.
    • ... потому что == и != на двух ссылочных типах (например, String) всегда являются ссылочным сравнением.
    • int может быть автобоксирован в Integer; автобоксирование из int[] в Integer[] невозможно.
  • В Java byte, short, int, long, sub* только знаковые. Следите за непреднамеренным расширением знака.
  • В Java нет многомерных массивов, только массивы массивов.
  • Большинство switch методов ранжированного запроса используют инклюзивную нижнюю границу и эксклюзивную верхнюю границу

Смотрите также

  • Загадки Java: Traps, Pitfalls, and Corner Cases
    • Веселое, но в то же время очень познавательное чтение.
    • Книга также имеет множество презентаций-преемников, доступных в интернете, например:
      • 2007 Google Tech Talk видео презентация
      • TS-5186: Возвращение головоломок: Шлок и трепет
      • TS-1188: Продолжение приключений Java Puzzlers: Ловушки для тигра
      • TS-2707: Java-загадки, эпизод VI: Призрачная угроза, Атака Клона, Месть Смены
  • Википедия/сравнение Java и C Sharp

Смежные вопросы

По некоторым темам, перечисленным выше:

  • Джеймс Гослинг объясняет, почему байт в Java подписывается
  • Java noob: дженерики только для объектов? (да, к сожалению)
  • Утверждение Switch со строками в Java?
  • Всегда ли верхние границы индексированных диапазонов считаются исключительными?
  • Гарантируется ли, что new Integer(i) == i в Java? (ДА!)
  • При сравнении двух целых чисел в Java (с помощью ==/!=) происходит ли автообнуление? (НЕТ!)
  • Почему int num = Integer.getInteger("123") бросает NullPointerException? (!!!)

Об общих проблемах Java:

  • Java - общие проблемы
  • Какие подводные камни подстерегают Java-новичка?
  • Самый неудобный/непонятный метод в Java Base API?

LetsCodeIt, 17 мая 2023 г., 23:20