Como faço para converter de int para Long em Java?

219

Eu continuo achando tanto no aqui e Google povos que têm problemas que vão desde longa inte não a outra em torno caminho. No entanto, tenho certeza de que não sou o único que já se deparou com esse cenário antes de passar intpara Long.

As únicas outras respostas que encontrei foram "Basta defini-lo como longo em primeiro lugar", o que realmente não aborda a questão.

Inicialmente, tentei transmitir, mas 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, estou um pouco perplexo, mas estou usando, intpois algum conteúdo está chegando como uma ArrayListentidade e a entidade para a qual estou armazenando essas informações requer o número de sequência como Longo.

Ghosty
fonte
for (long i = 0; i <myList.size (); ++ i) funciona muito
Instantsoup
@Instantsoup Sim que irá trabalhar para o loop, mas como eu especificado na parte inferior da minha pergunta o ArrayList Eu estou trabalhando com requer a int primitivo ao especificar que posição índice para obter
Ghosty
long longValue = intValue | 0L;
precisa
O que eu fiz é: converter intpara longprimeiro e depois atribuir longpara Long. por exemploint x = 2; Long y = (long)x;
Eric Wang

Respostas:

244

Observe que há uma diferença entre um elenco para longe um elenco para Long. Se você converter para long(um valor primitivo), ele deverá ser automaticamente encaixotado em um Long(o tipo de referência que o envolve).

Como alternativa, você pode usar newpara criar uma instância de Long, inicializando-a com o intvalor

Daniel Earwicker
fonte
31
Para demonstrar o que Earwicker disse, você poderia chamar Long.valueOf (i), que demora muito, mas amplia um int e devolve um objeto Long.
Grundlefleck
1
A opção de caixa automática é preferível, porque não precisa necessariamente criar um novo Longobjeto todas as vezes.
Michael Myers
2
(Aviso: o restante deste comentário é adivinhação e conjectura) Se os valores fornecidos a Long.valueOf () estiverem entre 0 e 128, o que é muito comum e retorna uma instância em cache, isso será preferível ao autoboxing? (I pode fazer uma nova pergunta se você acha que vale a pena ...)
Grundlefleck
4
Autoboxing faz a mesma coisa que isso. By the way, que é entre -127 e 128.
Daniel Earwicker
6
@ Grundlefleck: Autoboxing usa Long.valueOf()(se bem me lembro), então não haveria diferença alguma. Meu comentário foi em resposta à resposta, não ao seu comentário.
Michael Myers
193

Use o seguinte: Long.valueOf(int);.

serg
fonte
5
Cuidado, pois isso gerará uma NullPointerException se você estiver recebendo um objeto Inteiro que é nulo.
will824
2
correto se am wron eu pensei que pode ser a resposta é velho becuse eu não consigo encontrar o métodoLong.valueOf(int) !!
shareef
5
@ will824 - uma variável primitiva 'int' não pode ser nula.
Rondo
1
@shareef - veja o comentário de serg - mas acho que este método lança o int para uma longa que autoboxes com uma longa ... assim parece redundante
Rondo
1
@Rondo uma Integerlata, foi o que ele disse.
Moira
17

Se você já tiver digitado o int como um número inteiro, poderá fazer isso:

Integer y = 1;
long x = y.longValue();
saret
fonte
12

usar

new Long(your_integer);

ou

Long.valueOf(your_integer);
Mohammadreza Tavakoli
fonte
6

Eu tenho esse pequeno brinquedo, que também lida com interfaces não genéricas. Eu estou bem com isso lançando uma ClassCastException se o feed estiver errado (OK e feliz)

public class TypeUtil {
    public static long castToLong(Object o) {
        Number n = (Number) o;
        return n.longValue();
    }
}
Maxim Veksler
fonte
6

Em Java, você pode fazer:

 int myInt=4;
 Long myLong= new Long(myInt);

no seu caso, seria:

content.setSequence(new Long(i));
Tempo nublado
fonte
6

E quanto a

int myInt = 88;

// Não será compilado

Long myLong = myInt;

// Compila e mantém o espírito não-NULL de int. O melhor elenco não tem elenco . Obviamente, seu caso de uso pode exigir valores NULL longos e possíveis. Mas se o int ou outros longs são sua única entrada e seu método pode ser modificado, eu sugeriria essa abordagem.

long myLong = myInt;

// Compila, é a maneira mais eficiente e deixa claro que o valor de origem é e nunca será NULL.

Long myLong = (long) myInt;
Steven Spungin
fonte
3

Obteremos o valor longo usando Numberreferência.

public static long toLong(Number number){
    return number.longValue();
}

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

}
Thamme Gowda
fonte
3
 1,new Long(intValue);
 2,Long.valueOf(intValue);
Vicky
fonte
2

Eu tive muitos problemas com isso. Eu só queria:

thisBill.IntervalCount = jPaidCountSpinner.getValue();

Onde IntervalCount é um Long, e o JSpinner foi configurado para retornar um Long. Eventualmente, eu tive 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;
}

o que parece fazer o truque. Nenhuma quantidade de elenco simples, nenhuma das soluções acima funcionou para mim. Muito frustrante.

MaskedCoder
fonte
1
se jPaidCountSpinner.getValue()retorna um objeto que é de fato a Long, você definitivamente só precisa colocar um (Long)elenco à frente. Tente também colocar um ponto de interrupção no seu cheque para int.classou long.classetc. E se você tiver um objeto parecido com um número, ele será compatível java.util.Number, então faça isso e chame o longValuemétodo Não há necessidade de passar por uma string nesse caso. Portanto, essa função pode ser bastante simplificada, mesmo se você também precisar lidar com strings. (Parte do problema aqui é a documentação de referência incorreta para JSpinner).
Daniel Earwicker
1
Eu também acabei fazendo algo assim. Eu não tinha certeza de que tipo de número eu receberia e estava disposto a convertê-lo para Long com pouca preocupação com eficiência, mas querendo evitar o clichê.
Profiterole
2
 //Suppose you have int and you wan to convert it to Long
 int i=78;
 //convert to Long
 Long l=Long.valueOf(i)
Virendra Singh
fonte
0

Assim que houver apenas um método Long.valueOf(long), a conversão de intpara longserá feita implicitamente no caso de uso Long.valueOf(intValue).

A maneira mais clara de fazer isso é

Integer.valueOf(intValue).longValue()
Stanislav Tsepa
fonte
longValueé apenas um (long), então a única coisa que você "ganha" aqui é Integero cache interno.
Martin Schröder