while valores usando tipos sentencia saber retornar retornan retorna rango que primos primo primeros números numeros numero metodos metodo leer for entero determine determinar declaracion dado cuantos contiene con como java

java - valores - ¿Por qué devolver un int en un método que debería devolver un trabajo corto?



sentencia return java (3)

static void method(short x) { //do some stuff }

Cuando llamé al método anterior desde el método main usando la siguiente línea.

method(1); // compilation failed

Sé que la llamada anterior no es válida porque el parámetro ''x'' se espera corto y estamos pasando int.

También probé el concepto anterior y codifiqué otro método:

static short method() { //do some stuff return 1; }

pero el método anterior funciona bien, donde el tipo de retorno es corto y estamos devolviendo int. ¿Por qué compila el segundo método?


La declaración de return (JLS 14.17) puede usar una conversión de asignación (JLS 5.2) para convertir del tipo de expresión original al tipo de retorno.

La conversión de asignación incluye la capacidad de convertir una expresión constante a un tipo más estrecho si está en el rango del tipo de destino. Por lo tanto, una expresión constante de tipo int se puede convertir a short cuando el valor está en el rango de short .

Los argumentos de los métodos no pasan por la conversión de asignación, solo utilizan la conversión de invocación de métodos (JLS 5.3) que no incluye esta conversión constante.

En cuanto a por qué sucede esto, sospecho que simplemente simplifica las cosas. Las conversiones de asignación siempre tienen un único tipo de destino, mientras que en el caso de los argumentos de método, puede haber varias sobrecargas diferentes a considerar, por lo que tendría que haber más reglas para determinar qué tan específica sería una conversión de expresión constante. Eso es solo una suposición, y claramente se podría hacer. (C # permite esto, por ejemplo.)


No debería haber un problema con ningún Número dentro del rango de -32,768 y un valor máximo de 32,767

En realidad, puede usar un short para guardar la memoria en arreglos grandes, en situaciones donde el ahorro de memoria realmente importa.

En comparación, el tipo de datos int es un entero complementario de dos bits con signo de 32 bits. Tiene un valor mínimo de -2,147,483,648 y un valor máximo de 2,147,483,647 . Para los valores integrales, este tipo de datos generalmente es la opción predeterminada a menos que haya una razón (es decir, ahorro de memoria) para elegir otra cosa. Es muy probable que este tipo de datos sea lo suficientemente grande para los números que usará su programa, pero si necesita un rango de valores más amplio, use en long lugar long .


Su valor pasa a caber en un corto. Intente devolver algo que no encaje en 16 bits, como un valor entero mayor que 32767 y obtendrá un error de tiempo de compilación.