Использование 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.

Другие вопросы по тегам