Вот некоторые важные проблемы 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?