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.


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


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);.


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();


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();
    }
}

6

Em Java, você pode fazer:

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

no seu caso, seria:

content.setSequence(new Long(i));

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;

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

}

3
 1,new Long(intValue);
 2,Long.valueOf(intValue);

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.


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)

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()

longValueé apenas um (long), então a única coisa que você "ganha" aqui é Integero cache interno.
Martin Schröder
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.