Преобразование Long в строку в Java
В этом коротком руководстве мы узнаем, как преобразовать Long в String в Java .
2. Используйте Long.toString()
Например, предположим, что у нас есть две переменные типа long и Long (одна примитивного типа, а другая ссылочного типа):
long l = 10L; Long obj = 15L;
Мы можем просто использовать метод toString() класса Long , чтобы преобразовать их в String :
String str1 = Long.toString(l); String str2 = Long.toString(obj); System.out.println(str1); System.out.println(str2);
Вывод будет выглядеть следующим образом:
10 15
Если наш объект obj имеет значение null , мы получим исключение NullPointerException .
3. Используйте String.valueOf()
Мы можем использовать метод valueOf() класса String для достижения той же цели:
String str1 = String.valueOf(l); String str2 = String.valueOf(obj);
Когда obj имеет значение null , метод установит для str2 значение «null» вместо того, чтобы генерировать исключение NullPointerException .
4. Используйте String.format()
Помимо метода valueOf() класса String , мы также можем использовать метод format() :
String str1 = String.format("%d", l); String str2 = String.format("%d", obj);
str2 также будет «нулевым», если obj равен нулю .
5. Используйте метод toString() длинного объекта
Наш объект obj может использовать свой метод toString() для получения строкового представления:
String str = obj.toString();
Конечно, мы получим исключение NullPointerException , если obj равно null .
6. Использование оператора +
Мы можем просто использовать оператор + с пустой строкой , чтобы получить тот же результат:
String str1 = "" + l; String str2 = "" + obj;
str2 будет «нулевым», если obj равен нулю .
7. Используйте StringBuilder или StringBuffer
Объекты StringBuilder и StringBuffer можно использовать для преобразования Long в String :
String str1 = new StringBuilder().append(l).toString(); String str2 = new StringBuilder().append(obj).toString();
str2 будет «нулевым», если obj равен нулю .
8. Используйте десятичный формат
Наконец, мы можем использовать метод format () объекта DecimalFormat :
String str1 = new DecimalFormat("#").format(l); String str2 = new DecimalFormat("#").format(obj);
Будьте осторожны, потому что если obj имеет значение null , мы получим исключение IllegalArgumentException .
9. Заключение
Таким образом, мы изучили различные способы преобразования Long в String в Java . Нам решать, какой метод использовать, но, как правило, лучше использовать тот, который является кратким и не генерирует исключений.
- 1. Обзор
- 2. Используйте Long.toString()
- 3. Используйте String.valueOf()
- 4. Используйте String.format()
- 5. Используйте метод toString() длинного объекта
- 6. Использование оператора +
- 7. Используйте StringBuilder или StringBuffer
- 8. Используйте десятичный формат
- 9. Заключение
Не получается конвертировать Long в String
Пытаюсь сохранить время таймера обратного отсчёта, чтобы при выходе из приложения и при открытии его, скажем, через 3 часа, таймер показывал время с учётом этих 3 прошедших часов. Ошибка java.lang.classcastexception: java.lang.long cannot be cast to java.lang.String
Ошибка в этой строке: chronometer.setText(save.getString(APP_PREFERENCES_CHRONOMETER, deadline1));
Код, вернее его часть, необходимая для понимания сути проблемы:
long duration = TimeUnit.HOURS.toMillis(24); long endOfTask = System.currentTimeMillis() + duration; void saveText () < TextView chronometer = (TextView) findViewById(R.id.chronometer); SharedPreferences save = StartGame.this.getSharedPreferences("save", MODE_PRIVATE); SharedPreferences.Editor editor = save.edit(); editor.putLong(APP_PREFERENCES_CHRONOMETER, endOfTask); editor.apply(); >void loadText ()
Отслеживать
17.9k 11 11 золотых знаков 25 25 серебряных знаков 57 57 бронзовых знаков
задан 3 дек 2020 в 23:10
Bryan Brooks Bryan Brooks
1 2 2 бронзовых знака
getString -> getLong ?
4 дек 2020 в 2:18
Tы сохраняешь putLong, а пытаешься прочитать getString. Как-то определись )
4 дек 2020 в 3:37
0
Сортировка: Сброс на вариант по умолчанию
Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.
- java
- android
- mobile-development
Как long преобразовать в string java
Каждый базовый тип данных занимает определенное количество байт памяти. Это накладывает ограничение на операции, в которые вовлечены различные типы данных. Рассмотрим следующий пример:
int a = 4; byte b = a; // ! Ошибка
В данном коде мы столкнемся с ошибкой. Хотя и тип byte, и тип int представляют целые числа. Более того, значение переменной a, которое присваивается переменной типа byte, вполне укладывается в диапазон значений для типа byte (от -128 до 127). Тем не менее мы сталкиваемся с ошибкой на этапе компиляции. Поскольку в данном случае мы пытаемся присвоить некоторые данные, которые занимают 4 байта, переменной, которая занимает всего один байт.
Тем не менее в программе может потребоваться, чтобы подобное преобразование было выполнено. В этом случае необходимо использовать операцию преобразования типов (операция () ):
int a = 4; byte b = (byte)a; // преобразование типов: от типа int к типу byte System.out.println(b); // 4
Операция преобразования типов предполагает указание в скобках того типа, к которому надо преобразовать значение. Например, в случае операции (byte)a , идет преобразование данных типа int в тип byte. В итоге мы получим значение типа byte.
Явные и неявные преобразования
Когда в одной операции вовлечены данные разных типов, не всегда необходимо использовать операцию преобразования типов. Некоторые виды преобразований выполняются неявно, автоматически.
Автоматические преобразования

Стрелками на рисунке показано, какие преобразования типов могут выполняться автоматически. Пунктирными стрелками показаны автоматические преобразования с потерей точности.
Автоматически без каких-либо проблем производятся расширяющие преобразования (widening) — они расширяют представление объекта в памяти. Например:
byte b = 7; int d = b; // преобразование от byte к int
В данном случае значение типа byte, которое занимает в памяти 1 байт, расширяется до типа int, которое занимает 4 байта.
Расширяющие автоматические преобразования представлены следующими цепочками:
byte -> short -> int -> long
short -> float -> double
Автоматические преобразования с потерей точности
Некоторые преобразования могут производиться автоматически между типами данных одинаковой разрядности или даже от типа данных с большей разрядностью к типа с меньшей разрядностью. Это следующие цепочки преобразований: int -> float , long -> float и long -> double . Они производятся без ошибок, но при преобразовании мы можем столкнуться с потерей информации.
int a = 2147483647; float b = a; // от типа int к типу float System.out.println(b); // 2.14748365E9
Явные преобразования
Во всех остальных преобразованиях примитивных типов явным образом применяется операция преобразования типов. Обычно это сужающие преобразования (narrowing) от типа с большей разрядностью к типу с меньшей разрядностью:
long a = 4; int b = (int) a;
Потеря данных при преобразовании
При применении явных преобразований мы можем столкнуться с потерей данных. Например, в следующем коде у нас не возникнет никаких проблем:
int a = 5; byte b = (byte) a; System.out.println(b); // 5
Число 5 вполне укладывается в диапазон значений типа byte, поэтому после преобразования переменная b будет равна 5. Но что будет в следующем случае:
int a = 258; byte b = (byte) a; System.out.println(b); // 2
Результатом будет число 2. В данном случае число 258 вне диапазона для типа byte (от -128 до 127), поэтому произойдет усечение значения. Почему результатом будет именно число 2?
Число a, которое равно 258, в двоичном системе будет равно 00000000 00000000 00000001 00000010 . Значения типа byte занимают в памяти только 8 бит. Поэтому двоичное представление числа int усекается до 8 правых разрядов, то есть 00000010 , что в десятичной системе дает число 2.
Усечение рациональных чисел до целых
При преобразовании значений с плавающей точкой к целочисленным значениям, происходит усечение дробной части:
double a = 56.9898; int b = (int)a;
Здесь значение числа b будет равно 56, несмотря на то, что число 57 было бы ближе к 56.9898. Чтобы избежать подобных казусов, надо применять функцию округления, которая есть в математической библиотеке Java:
double a = 56.9898; int b = (int)Math.round(a);
Преобразования при операциях
Нередки ситуации, когда приходится применять различные операции, например, сложение и произведение, над значениями разных типов. Здесь также действуют некоторые правила:
- если один из операндов операции относится к типу double , то и второй операнд преобразуется к типу double
- если предыдущее условие не соблюдено, а один из операндов операции относится к типу float , то и второй операнд преобразуется к типу float
- если предыдущие условия не соблюдены, один из операндов операции относится к типу long , то и второй операнд преобразуется к типу long
- иначе все операнды операции преобразуются к типу int
int a = 3; double b = 4.6; double c = a+b;
Так как в операции участвует значение типа double, то и другое значение приводится к типу double и сумма двух значений a+b будет представлять тип double.
byte a = 3; short b = 4; byte c = (byte)(a+b);
Две переменных типа byte и short (не double, float или long), поэтому при сложении они преобразуются к типу int , и их сумма a+b представляет значение типа int. Поэтому если затем мы присваиваем эту сумму переменной типа byte, то нам опять надо сделать преобразование типов к byte.
Если в операциях участвуют данные типа char, то они преобразуются в int:
int d = 'a' + 5; System.out.println(d); // 102
java Конвертирование из long в String java.lang.Long cannot be cast to java.lang.Str— шибка как исправить
![]()
Используйте, как и для числе другого типа String.valueOf():
String num = String.valueOf(pif.get("AccountNumber")); // где pif.get("AccountNumber") возвращает Long