Перейти к содержимому

Как long преобразовать в string java

  • автор:

Преобразование 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.

Явные и неявные преобразования

Когда в одной операции вовлечены данные разных типов, не всегда необходимо использовать операцию преобразования типов. Некоторые виды преобразований выполняются неявно, автоматически.

Автоматические преобразования

Преобразования типов в языке Java

Стрелками на рисунке показано, какие преобразования типов могут выполняться автоматически. Пунктирными стрелками показаны автоматические преобразования с потерей точности.

Автоматически без каких-либо проблем производятся расширяющие преобразования (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— шибка как исправить

vedro-compota's picture

Используйте, как и для числе другого типа String.valueOf():

String num = String.valueOf(pif.get("AccountNumber")); // где pif.get("AccountNumber") возвращает Long

Key Words for FKN + antitotal forum (CS VSU):

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *