2009-08-19 30 views
167

Sigo encontrando tanto aquí y Google personas que tienen problemas van desde long a int y no al revés. Sin embargo, estoy seguro de que no soy el único que se ha encontrado con este escenario antes de pasar de int a Long.¿Cómo convierto de int a Long en Java?

Las únicas otras respuestas que encontré fueron "Simplemente configúralo como Long en primer lugar", lo que realmente no soluciona la pregunta.

¿Alguien me puede ayudar aquí? Inicialmente intentado fundición, pero me sale 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 se puede imaginar que estoy un poco confundido, estoy atascado utilizando int desde algún contenido está entrando como un ArrayList y la entidad para la cual El almacenamiento de esta información requiere el número de secuencia como Largo.

Gracias!

+0

para (a largo i = 0; i Instantsoup

+0

@Instantsoup Sí que va a trabajar para el bucle, pero a medida que se especifica en la parte inferior de mi pregunta que la ArrayList con la que estoy trabajando requiere la primitiva int al especificar qué posición de índice obtener – Ghosty

+0

long longValue = intValue | 0L; –

Respuesta

203

Tenga en cuenta que existe una diferencia entre un molde a long y un molde a Long. Si transfiere a long (un valor primitivo), entonces debe encasillarse automáticamente en un Long (el tipo de referencia que lo envuelve).

Como alternativa, puede usar new para crear una instancia de Long, inicializándola con el valor int.

+21

Para demostrar lo que dijo Earwicker, podría llamar a Long.valueOf (i), que demora mucho pero ampliará una int y le devolverá un objeto Long. – Grundlefleck

+0

Autoboxing es preferible, porque no necesariamente tiene que crear un nuevo objeto 'Long' todo el tiempo. –

+1

(Advertencia: el resto de este comentario es conjetura y conjetura) Si los valores dados a Long.valueOf() caen entre 0 y 128, lo cual es muy común, y devuelve una instancia en caché, será preferible a autoboxing ? (Puedo hacer una nueva pregunta si crees que vale la pena ...) – Grundlefleck

150

Utilice lo siguiente: Long.valueOf(int);.

+1

¿Hay tal método? –

+17

Hay Long.valueOf (long) que también funciona para int. – serg

+3

Cuidado, ya que esto generará una NullPointerException si está recibiendo un objeto entero que es nulo. – will824

13

Si ya tiene la int escrito como un entero que puede hacer esto:

Integer y = 1; 
long x = y.longValue(); 
0

tuve una gran cantidad de problemas con esto. Sólo quería:

thisBill.IntervalCount = jPaidCountSpinner.getValue(); 

Dónde IntervalCount es un largo, y la JSpinner estaba previsto regresar de un largo. 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 fundición simple, ninguna de las soluciones anteriores funcionó para mí. Muy frustrante.

+0

si 'jPaidCountSpinner.getValue()' devuelve un Objeto que es de hecho un 'Largo', definitivamente solo necesitas poner un molde' (Largo) 'al frente. También intente poner un punto de interrupción en su cheque para 'int.class' o' long.class', etc. ¿Alguna vez lo golpea? Y si tiene un objeto similar a un número, admitirá 'java.util.Number', así que empújelo y llame al método' longValue'. No es necesario pasar por una cadena en ese caso. Así que esta función podría simplificarse un poco, incluso si también tiene que lidiar con cadenas. (Parte del problema aquí es la documentación de referencia incorrecta para 'JSpinner'). –

5

Tengo este pequeño juguete, que también se ocupa de las interfaces no genéricas. estoy bien con ella lanzando un ClassCastException si alimentas mal (Aceptar y feliz)

public class TypeUtil { 
    public static long castToLong(Object o) { 
     Number n = (Number) o; 
     return n.longValue(); 
    } 
} 
4

En Java que puede hacer:

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

en su caso sería:

content.setSequence(new Long(i)); 
2

Obtendremos el valor largo utilizando la referencia Number.

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

Funciona para todos los tipos de números, aquí es 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 

} 
8

uso

new Long(your_integer); 

o

Long.valueOf(your_integer); 
2

¿Qué tal

int myInt = 88; 

// no se compilará

Long myLong = myInt; 

// recopila y conserva el espíritu no nulo de int. El mejor elenco es no emitido en absoluto. Por supuesto, su caso de uso puede requerir valores NULL largos y posibles. Pero si la int u otras longs son su única entrada, y su método puede ser modificado, sugeriría este enfoque.

long myLong = myInt; 

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

Long myLong = (long) myInt; 
1
//Suppose you have int and you wan to convert it to Long 
int i=78; 
//convert to Long 
Long l=Long.valueOf(i) 
Cuestiones relacionadas