Использование downcasting в реальной жизни приложения
Я знаю, что неявное приведение выполняется автоматически компилятором и виртуальной машиной, и что явное приведение необходимо для преобразования типов данных, когда Java не уверена, будет ли результат верным. Приведение должно быть сделано между примитивами или между объектами.
Мой вопрос: если мое приложение использует как целые, так и длинные целые числа - я должен использовать long
для обоих типов? Или уныние для long
? Или кастинг для int
?
Может ли использование long для обоих типов вызвать некоторые проблемы?
4 ответа
Я, вероятно, пойду с правильным типом данных для правильных операций, long
если мне нужно long
, int
если int
достаточно для моих требований. Здравый смысл будет думать, используя long
за int
Возможно, это замедлит вас в целом, но, опять же, это зависит от конкретной реализации JVM. Вы должны будете решить, основываясь на диапазоне, на который вы хотите нацелиться.
Опять же, если в вашей программе задействовано много кастингов, то лучше выбрать такой тип данных, как long
который может вместить больший диапазон, чем int
и избавит вас от забастовок и потери данных в этом процессе. Было сказано, что, long
может быть медленнее, чем int
хотя в современных процессорах и JVM я сомневаюсь, что это может сильно повлиять.
Может быть, просвещенные здесь могут лучше ответить на этот вопрос.
Вы также можете прочитать некоторые хорошие вопросы и ответы здесь и здесь.
Я думаю, что вы должны использовать тип данных, который охватывает все ваши значения, поэтому я бы использовал long
для всего, потому что это упрощает код и избегает потенциально рискованных преобразований.
- Кастинг от
long
вint
может заставить вас потерять данные, так какlong
больше чемint
(таким образом, данные усекаются в приведении). - Кастинг от
int
вlong
почти (см. комментарий Колина Морелли об этом ниже) так же, как использованиеlong
с самого начала, и вы избегаете жонглирования с 2-х типов. Также этот кастинг просто не имеет смысла, так как вы на самом деле занимаетесь памятью (если вы не использовалиint
и метод явно требуетlong
в качестве параметра, то, очевидно, у вас нет выбора, кроме как бросить).
Недостатки, которые я вижу, используя long
являются:
long
удваивает необходимую память вместоint
(все еще принимайте во внимание комментарий Колина Морелли ниже).long
может привести к снижению производительности (как сказано выше, но я не уверен в этом)
Вы действительно должны быть более четкими в отношении диапазона чисел, с которыми вы имеете дело. Что ж, при заданном входе лучше всего пойти с long
, Но если вам действительно нужно сделать его общим, а память не является ограничением, тогда вы можете использовать BigInteger
,
Это зависит от вашего диапазона дат. Посмотрите Учебники по Java: Примитивные типы данных, если вы знаете, что ваши числа будут между Integer.MIN_VALUE и Integer.MAX_VALUE не сладкими, приведение будет работать, как и ожидалось. Остальное, иди за long
или BigInteger.