¿Cómo convierto de int a Long en Java?

219

Sigo encontrando que tanto aquí como en Google las personas tienen problemas para ir de un lado longa otro inty no al revés. Sin embargo, estoy seguro de que no soy el único que ha funcionado en este escenario antes de ir de inta Long.

Las únicas otras respuestas que he encontrado fueron "Solo configúrelo como Largo en primer lugar", lo que realmente no responde a la pregunta.

Inicialmente probé el casting pero obtengo un " 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 puede imaginar, estoy un poco perplejo, estoy atascado con el uso, intya que parte del contenido está entrando como ArrayListy la entidad para la que estoy almacenando esta información requiere el número de secuencia como Largo.

Fantasma
fuente
for (long i = 0; i <myList.size (); ++ i) también funciona
Instantsoup
@Instantsoup Sí que va a trabajar para el bucle, pero a medida que se especifica en la parte inferior de mi pregunta ArrayList Estoy trabajando con el int requiere primitiva cuando se especifica cuál es la posición de índice de conseguir
Ghosty
long longValue = intValue | 0L;
Daniel Jipa
Lo que hice fue: emitir inta longprimero, luego asignar longa Long. egint x = 2; Long y = (long)x;
Eric Wang

Respuestas:

244

Tenga en cuenta que hay una diferencia entre un yeso longy un yeso Long. Si realiza una conversión a long(un valor primitivo), entonces debería encuadrarse automáticamente en a Long(el tipo de referencia que lo envuelve).

Alternativamente, puede usar newpara crear una instancia de Long, inicializándola con el intvalor.

Daniel Earwicker
fuente
31
Para demostrar lo que dijo Earwicker, podría llamar a Long.valueOf (i), que tarda mucho pero ampliará un int y le devolverá un objeto Long.
Grundlefleck
1
El autoboxing es preferible, porque no necesariamente tiene que crear un nuevo Longobjeto cada vez.
Michael Myers
2
(Advertencia: el resto de este comentario es conjeturas y conjeturas) Si los valores dados a Long.valueOf () caen entre 0 y 128, lo cual es muy común, y devuelve una instancia almacenada en caché, ¿será eso preferible al autoboxing? (Puedo hacer una nueva pregunta si crees que vale la pena ...)
Grundlefleck
44
Autoboxing hace lo mismo que eso. Por cierto, es entre -127 y 128.
Daniel Earwicker
66
@Grundlefleck: Autoboxing utiliza Long.valueOf()(si no recuerdo mal ), por lo que no habría ninguna diferencia. Mi comentario fue en respuesta a la respuesta, no a tu comentario.
Michael Myers
194

Usar el siguiente: Long.valueOf(int);.

serg
fuente
55
Tenga cuidado, ya que esto generará una NullPointerException si está recibiendo un objeto Integer que es nulo.
will824
2
correcta si wron am i pensamiento puede ser la respuesta es vieja becuse no puedo encontrar el métodoLong.valueOf(int) !!
shareef
55
@ will824: una variable 'int' primitiva no puede ser nula.
Rondo
1
@shareef - vea el comentario de serg - pero creo que este método convierte el int en un largo que autoboxes con un largo ... parece redundante
Rondo
1
@Rondo una Integerlata, que es lo que dijo.
Moira
17

Si ya tiene el int tipeado como Integer, puede hacer esto:

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

utilizar

new Long(your_integer);

o

Long.valueOf(your_integer);
Mohammadreza Tavakoli
fuente
6

Tengo este pequeño juguete, que también trata con interfaces no genéricas. Estoy de acuerdo con que arroje una ClassCastException si la alimentación es incorrecta (OK y feliz)

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

En Java puedes hacer:

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

en su caso sería:

content.setSequence(new Long(i));
clima nublado
fuente
6

Qué tal si

int myInt = 88;

// No compilará

Long myLong = myInt;

// Compila y retiene el espíritu no NULL de int. El mejor elenco es ningún elenco . Por supuesto, su caso de uso puede requerir valores NULL largos y posibles. Pero si el int u otros largos son su única entrada, y su método puede modificarse, sugeriría este enfoque.

long myLong = myInt;

// Compila, es la forma más eficiente, y deja en claro que el valor de origen es y nunca será NULL.

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

Obtendremos el valor largo utilizando la Numberreferencia.

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

Funciona para todos los tipos de números, aquí hay una prueba:

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
fuente
3
 1,new Long(intValue);
 2,Long.valueOf(intValue);
Vicky
fuente
2

Tuve muchos problemas con esto. Solo quería:

thisBill.IntervalCount = jPaidCountSpinner.getValue();

Donde IntervalCount es un Long, y el JSpinner estaba configurado para devolver un Long. Finalmente tuve que escribir esta función:

    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 hacer el truco. Ninguna cantidad de casting simple, ninguna de las soluciones anteriores funcionó para mí. Muy frustrante.

Enmascarado
fuente
1
si jPaidCountSpinner.getValue()devuelve un Objeto que de hecho es un Long, definitivamente solo necesitas poner un (Long)lanzamiento al frente. También intente poner un punto de interrupción en su cheque int.classo long.classetc. ¿Alguna vez lo golpeó? Y si tiene un objeto similar a un número, lo admitirá java.util.Number, por lo que debe utilizarlo y llamar al longValuemétodo. No es necesario pasar por una cadena en ese caso. Por lo tanto, esta función podría simplificarse bastante, incluso si también necesita lidiar con cadenas. (Parte del problema aquí es la documentación de referencia incorrecta para JSpinner).
Daniel Earwicker
1
Yo también terminé haciendo algo como esto. No estaba seguro de qué tipo de número recibiría y estaba dispuesto a convertirlo a Long con poca preocupación por la eficiencia pero queriendo evitar repeticiones.
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
fuente
0

Tan pronto como solo haya un método Long.valueOf(long), la conversión de inta longse realizará implícitamente en caso de uso Long.valueOf(intValue).

La forma más clara de hacer esto es

Integer.valueOf(intValue).longValue()
Stanislav Tsepa
fuente
longValuees solo un (long), así que lo único que "gana" aquí es Integerel caché interno.
Martin Schröder