Используйте String
. Помимо всего прочего, вы не сможете хранить начальные нули, если будете использовать целые числа. Вы определенно не должны использовать int
(слишком мало) float
или double
(слишком большой риск потери данных - см. Ниже); long
или BigInteger
могут быть подходящими (кроме проблемы начальных нулей), но, честно говоря, я бы пошел с String
. Таким образом, вы можете также сохранять любые введенные пользователем тире или пробелы, чтобы было легче запомнить номер, если хотите.
С точки зрения "потери данных", упомянутой выше для float
и double
- float
, определенно не хватает точности; double
может работать, если вы счастливы, что вам никогда не понадобится больше 16 цифр (на пару меньше, чем у вас с long
), но вам нужно быть очень, очень осторожным, чтобы где угодно вы конвертируете значение обратно из double
в string
, вы получите точное значение. Многие преобразования форматирования дадут вам приближение, которое может быть точным, скажем, до 10 значащих цифр - но вам нужно точное целое число. По сути, использование числа с плавающей запятой для телефонных номеров является принципиально плохой идеей. Если у вас есть для использования числового типа фиксированной ширины, используйте long
, но в идеале избегайте его полностью.