2010-12-14 22 views
5

Estoy usando Eclipse Java EE para realizar la programación Java.Java: resultado a largo = -1: no se puede convertir de int a long

que tenía la siguiente línea de código en una de mis funciones:

Long result = -1; 

tengo el siguiente error:

Type mismatch: cannot convert from int to Long

no acabo de entender por qué cuando agrego un número de la variable proporciona este error.

¿Cómo puede resolverse este problema y por qué sucedió en el primer lugar?

Respuesta

15

no hay conversión entre el objeto y Longint Así que hay que hacerlo desde long. La adición de un L hace que el número entero -1 en un long (-1L):

Long result = -1L; 

Sin embargo, hay una conversión de int un long por lo que este funciona:

long result = -1; 

Por lo tanto se puede escribir como esto aswell:

Long result = (long) -1; 

Conversión de una primitiva (int, long etc) a un objeto Paquete de oferta (Integer, Long etc) se llama autoboxing, leer más here.

+5

+1, y es importante estar en mayúsculas. '-1l' se parece a' -11' :) – Bozho

0

Para especificar una constante de tipo long, el sufijo con un L:

Long result = -1L; 

Sin la L, los tipos intérprete el número constante como un int, que no es del mismo tipo que un long.

1
Long result = -1L; 
4

-1 pueden incluirse automáticamente en un Entero.

Por lo tanto:

Integer result = -1; 

obras y es equivalente a:

Integer result = Integer.valueOf(-1); 

Sin embargo, un número entero no se puede asignar a un largo, por lo que la conversión total en la pregunta no.

Long result = Integer.valueOf(-1); 

tampoco funcionará.

Si lo hace:

Long result = -1L; 

su equivalente (de nuevo debido a la auto-boxing) a:

Long result = Long.valueOf(-1L); 

Tenga en cuenta que la L lo convierte en un long literal.

2

Antes que nada, compruebe su versión de Java: ejecute "java -version" desde la línea de comandos.

En la versión Java antes de 1.5, la sintaxis correcta es:

larga resultado = new larga (1 l);

En java> 1.5 se hace automáticamente. Se llama "autoboxing".

La letra mayúscula "L" indica a Java que el número debe interpretarse como largo.

+2

'Long.valueOf (1L);' es mejor que 'new Long (1L);', porque puede proporcionarle un objeto en caché. Consulte los documentos API de 'Long.valueOf (long)' para obtener más información. – Jesper

+0

Lo mismo ocurre con la letra minúscula 'l'. – EJP

1
Long result = -1L; 

Long result = (long) -1; 

Long result 
    = Long.valueOf(-1); // this is what auto-boxing does under the hood 

cómo sucedió en el primer lugar es que el literal -1 es un int. A partir de Java5, puede tenerlo en caja automática en Integer, cuando lo usa como en Object, pero no se convertirá en Long (solo long s).

Tenga en cuenta que un int se amplía automáticamente en un tiempo cuando sea necesario:

long result = -1; // this is okay 

La forma opuesta necesita una conversión explícita:

int number = (int) result; 
1

-1 es un valor int primitivo, Long sin embargo es el envoltura clase java.lang.Long. Un valor entero primitivo no se puede asignar a un objeto Largo. Hay dos formas de resolver esto.

  1. Cambiar el tipo de long

    Si cambia el tipo de la clase contenedora Long a lo primitivo tipo long java lanza automáticamente el valor entero a un valor de largo.

    long result = -1;

  2. Cambiar el valor int a long

    Si cambia el valor entero de -1 a -1L a que el cambio explícita a un literal java tiempo puede utilizar este valor primitivo se ajuste automáticamente este valor a un java.lang.Long objeto.

    Long result = -1L;

Cuestiones relacionadas