Como faço para converter de int para Long em Java?
-
19-09-2019 - |
Pergunta
Eu continuo achando tanto no aqui e Google povos que têm problemas que vão de long
para int
e não o contrário. No entanto, eu tenho certeza que não sou o único que tem executar para esse cenário antes de ir de int
para Long
.
A única outra resposta que eu encontrei foram "Basta configurá-lo como longo em primeiro lugar", que realmente não abordar a questão.
I inicialmente tentou lançar, mas eu recebo um "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);
}
Como você pode imaginar que estou um pouco perplexo, eu estou preso usando int
desde algum conteúdo está chegando como um ArrayList
ea entidade para a qual eu sou armazenar esta informação requer o número de seqüência como um longa.
Solução
Note que há uma diferença entre um elenco de long
e um elenco de Long
. Se você lançar a long
(um valor primitivo), então ele deve ser encaixotado automaticamente para um Long
(o tipo de referência que embrulha-lo).
Você pode alternativamente usar new
para criar uma instância de Long
, inicializando-lo com o valor int
.
Outras dicas
Use o seguinte: Long.valueOf(int);
.
Se você já tem o int digitado como um inteiro que você pode fazer isso:
Integer y = 1;
long x = y.longValue();
uso
new Long(your_integer);
ou
Long.valueOf(your_integer);
Eu tenho este pequeno brinquedo, que também lida com interfaces não genéricos. Estou OK com ele jogando um ClassCastException se errada de alimentação (OK e feliz)
public class TypeUtil {
public static long castToLong(Object o) {
Number n = (Number) o;
return n.longValue();
}
}
Em Java você pode fazer:
int myInt=4;
Long myLong= new Long(myInt);
no seu caso seria:
content.setSequence(new Long(i));
Vamos obter o valor de longo usando referência Number
.
public static long toLong(Number number){
return number.longValue();
}
Ele funciona para todos os tipos de números, aqui está um teste:
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
}
Como Sobre
int myInt = 88;
// Será que não compilação
Long myLong = myInt;
// compila, e mantém o espírito não-NULL de int. A melhor elenco é nenhum o lançarei em tudo . Claro, seu caso de uso pode exigir longo e possíveis valores nulos. Mas se o int, ou outros longs são sua única entrada, e seu método podem ser modificados, gostaria de sugerir essa abordagem.
long myLong = myInt;
// compila, é a forma mais eficiente, e deixa claro que o valor de origem, é e nunca será NULL.
Long myLong = (long) myInt;
1,new Long(intValue);
2,Long.valueOf(intValue);
Eu tinha um grande problema com isso. Eu só queria:
thisBill.IntervalCount = jPaidCountSpinner.getValue();
Onde IntervalCount é um longo, eo JSpinner foi definido para retornar um longo. Eventualmente, eu tinha que escrever esta função:
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;
}
que parece fazer o truque. Nenhuma quantidade de simples casting, nenhuma das soluções acima funcionou para mim. Muito frustrante.
//Suppose you have int and you wan to convert it to Long
int i=78;
//convert to Long
Long l=Long.valueOf(i)
Assim que só há método Long.valueOf(long)
, elenco de int
para long
será feito implicitamente no caso de utilizar Long.valueOf(intValue)
.
A maneira mais clara de fazer isso é
Integer.valueOf(intValue).longValue()