Возможно, мне придется перейти на Java для нового проекта. Я очень мало знаю о Java, потому что я в основном изучал и использовал C #, и я боюсь, что различия между этими двумя языками / платформами могут вызвать у меня много проблем.
О каких подводных камнях / ошибках я должен заботиться?
Ответы:
Вот несколько важных моментов Java при переходе с C #:
switch
кейсы могут незаметно переходить к следующему, поэтому убедитесь, что вы всегда ставите их,break
когда это необходимо. Вы также не можетеswitch
наString
в Java.List<int>
, только котList<Integer>
. Автобокс скрывает многословие, но вы можете получитьNullPointerException
при распаковкеnull
. Также==
и!=
на двух штучных примитивных типах выполняют эталонное сравнение.==
и!=
на двух ссылочных типах (напримерString
) всегда есть ссылочные сравненияint
может быть автоматически упакован вInteger
; нет автобокса отint[]
доInteger[]
.byte
,short
,int
,long
подписываются только. Следите за непреднамеренным расширением знака.sub*
ранжированные методы запроса используют включающую нижнюю границу и исключительную верхнюю границуString.substring(int beginIndex, int endIndex)
CharSequence.subSequence(int start, int end)
List.subList(int fromIndex, int toIndex)
SortedSet<E>.subSet(E fromElement, E toElement)
SortedMap<K,V>.subMap(K fromKey, K toKey)
Смотрите также
Смежные вопросы
По некоторым темам, перечисленным выше:
new Integer(i) == i
в Java? (ДА!)==
/!=
) происходит автоматическая распаковка? (НЕТ!)int num = Integer.getInteger("123")
бросатьNullPointerException
? (!!!)На общих Java попал:
источник
Одна очевидная ловушка - сравнение строк в стиле C #
string1 == string2
(Java сравнивает только ссылки) вместо стиля Javastring1.equals(string2)
.Другой - это
private
модификатор доступа по умолчанию в C #,package
в Java.Также
ToString()
методы не локализуются автоматически в соответствии с текущей культурой в Java.источник
Я получил аргументы подстроки Java : beginIndex, endIndex, а аргументы подстроки C # - startIndex, length. Этого достаточно для того, чтобы сделать это раздражающим, и хорошая вероятность того, что индекс выйдет за границы в любом случае, когда вы переключаетесь.
источник
Гектометр
источник
источник
Самая большая мета-ловушка состоит в том, что предполагается, что язык и библиотеки Java ведут себя так же, как похожий материал в C #. Делайте учебные пособия, читайте Javadocs, не предполагайте ...
Еще одна мета-ловушка - предположить, что тот факт, что вы можете делать что-то в Java, так же легко / приятно, как вы можете / могли бы делать в C #. Это не правда. Ява - намного более старый язык, и были допущены ошибки ...
И последняя мета-ловушка заключается в том, что если вы будете жаловаться на то, что в Java на SO отсутствуют какие-либо вещи, вы получите всеобщее сочувствие / поддержку!
источник
Остерегайтесь различий в модификаторах доступа по умолчанию. Также обратите внимание, что все нестатические методы в Java являются виртуальными (если вы не пометите их как final).
Хотя это несколько устарело, я обнаружил, что это отличная ссылка.
Сравнение C # и Java от Dare Obasanjo
источник
Also note that all non-static methods in Java are virtual.
Как бы я хотел, чтобы C # был таким жезависит от того, над какой программой вы работаете. В Википедии есть эта статья, и она довольно обширна. (также ознакомьтесь с разделом «внешние ссылки» в конце) http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp .
Кроме того, я прочитал эту статью, когда я переключился с C # на Java http://www.25hoursaday.com/CsharpVsJava.html, и это было очень полезно.
источник
Я думаю, что ваш вопрос субъективен. Все не может быть объяснено здесь. Я предлагаю вам прочитать Java Puzzlers , By
Joshua Bloch and Neal Gafter
. Вы можете узнать больше и быть в безопасности от ловушек.источник
В языке Java объективные эквиваленты примитивных типов, таких как int, char, не являются «типами значений» (например, Integer является ссылочным типом). В C # System.Int32 является структурой.
источник