Как мне преобразовать int в Long в Java?
-
19-09-2019 - |
Вопрос
Я постоянно нахожу как здесь, так и в Google людей, у которых возникают проблемы с переходом от long
к int
а не наоборот.Тем не менее, я уверен, что я не единственный, кто столкнулся с этим сценарием, прежде чем перейти от int
к Long
.
Единственные другие ответы, которые я нашел, были: «Просто сначала установите его как длинный», что на самом деле не отвечает на вопрос.
Сначала я попробовал кастинг, но получил "Cannot cast from int to Long
"
for (int i = 0; i < myArrayList.size(); ++i ) {
content = new Content();
content.setDescription(myArrayList.get(i));
content.setSequence((Long) i);
session.save(content);
}
Как вы понимаете, я немного озадачен, я застрял в использовании int
поскольку некоторый контент поступает в виде ArrayList
и объект, для которого я храню эту информацию, требует, чтобы порядковый номер был длинным.
Решение
Обратите внимание, что существует разница между приведением к long
и приведение к Long
.Если вы примените long
(примитивное значение), то оно должно автоматически помещаться в Long
(ссылочный тип, который его обертывает).
Альтернативно вы можете использовать new
чтобы создать экземпляр Long
, инициализируя его с помощью int
ценить.
Другие советы
Используйте следующее: Long.valueOf(int);
.
Если у вас уже есть int, набранный как целое число, вы можете сделать это:
Integer y = 1;
long x = y.longValue();
использовать
new Long(your_integer);
или
Long.valueOf(your_integer);
У меня есть маленькая игрушка, которая также имеет дело с неуниверсальными интерфейсами.Меня устраивает выдача исключения ClassCastException, если подача неправильная (хорошо и счастливо)
public class TypeUtil {
public static long castToLong(Object o) {
Number n = (Number) o;
return n.longValue();
}
}
В Java вы можете сделать:
int myInt=4;
Long myLong= new Long(myInt);
в вашем случае это будет:
content.setSequence(new Long(i));
Мы получим длинное значение, используя Number
ссылка.
public static long toLong(Number number){
return number.longValue();
}
Он работает для всех типов номеров, вот тест:
public static void testToLong() throws Exception {
assertEquals(0l, toLong(0)); // an int
assertEquals(0l, toLong((short)0)); // a short
assertEquals(0l, toLong(0l)); // a long
assertEquals(0l, toLong((long) 0)); // another long
assertEquals(0l, toLong(0.0f)); // a float
assertEquals(0l, toLong(0.0)); // a double
}
Как насчет
int myInt = 88;
// Не будет компилироваться
Long myLong = myInt;
// Компилируется и сохраняет дух int, отличный от NULL.Лучшее бросать является вообще нет актерского состава.Конечно, ваш вариант использования может потребовать значений Long и NULL.Но если int или другие длинные значения являются вашими единственными входными данными и ваш метод можно изменить, я бы предложил этот подход.
long myLong = myInt;
// Компилируется. Это наиболее эффективный способ, который дает понять, что исходное значение равно и никогда не будет NULL.
Long myLong = (long) myInt;
1,new Long(intValue);
2,Long.valueOf(intValue);
У меня были большие проблемы с этим.Я только хотел:
thisBill.IntervalCount = jPaidCountSpinner.getValue();
Где IntervalCount — это Long, а JSpinner настроен на возврат Long.В конце концов мне пришлось написать эту функцию:
public static final Long getLong(Object obj) throws IllegalArgumentException {
Long rv;
if((obj.getClass() == Integer.class) || (obj.getClass() == Long.class) || (obj.getClass() == Double.class)) {
rv = Long.parseLong(obj.toString());
}
else if((obj.getClass() == int.class) || (obj.getClass() == long.class) || (obj.getClass() == double.class)) {
rv = (Long) obj;
}
else if(obj.getClass() == String.class) {
rv = Long.parseLong(obj.toString());
}
else {
throw new IllegalArgumentException("getLong: type " + obj.getClass() + " = \"" + obj.toString() + "\" unaccounted for");
}
return rv;
}
который, кажется, делает свое дело.Никакие простые кастинги, ни одно из вышеперечисленных решений мне не помогло.Очень неприятно.
//Suppose you have int and you wan to convert it to Long
int i=78;
//convert to Long
Long l=Long.valueOf(i)
Пока есть только метод Long.valueOf(long)
, отлитый из int
к long
будет сделано неявно в случае использования Long.valueOf(intValue)
.
Более понятный способ сделать это
Integer.valueOf(intValue).longValue()