En este tutorial, aprenderá a escribir expresiones para sus programas Java. En muchos casos, utilizará operadores para escribir sus expresiones Java y hay muchos tipos de operadores que debe saber cómo utilizar. Presentaré brevemente los tipos de operadores de Java, incluidos los tipos aditivos, bit a bit, lógicos, condicionales, de desplazamiento e igualdad y sus operandos. También aprenderá sobre la sobrecarga de operadores y la precedencia de operadores, y verá una demostración de conversión de tipos primitivos. Concluiré con un pequeño programa Java que puede utilizar para practicar conversiones de tipo primitivo por su cuenta. Lo que aprenderá en este tutorial de Java ¿Qué es una expresión Java? Cómo escribir expresiones simples Cómo escribir expresiones compuestas Acerca de los operadores y operandos de Java Todos los tipos de operadores en Java, con ejemplos Acerca de la precedencia y asociatividad de los operadores Cómo trabajar con conversiones de tipos primitivos descargar Descargue el código fuente de aplicaciones de ejemplo en este tutorial. Creado por Jeff Friesen. ¿Qué es una expresión Java? Las expresiones son combinaciones de literales, llamadas a métodos, nombres de variables y operadores. Las aplicaciones Java evalúan expresiones. La evaluación de una expresión produce un nuevo valor que puede almacenarse en una variable, usarse para tomar una decisión y más. Cómo escribir expresiones simples Una expresión simple es un literal, un nombre de variable o una llamada a un método. No hay operadores involucrados. A continuación se muestran algunos ejemplos de expresiones simples: 52 // edad literal entera // nombre de la variable System.out.println(«ABC»); // llamada al método «Java» // literal de cadena 98.6D // literal de punto flotante de doble precisión 89L // literal entero largo Una expresión simple tiene un tipo, que es un tipo primitivo o un tipo de referencia. En estos ejemplos, 52 es un entero de 32 bits (int); System.out.println(«ABC»); es nulo (nulo) porque no devuelve ningún valor; «Java» es una cadena (Cadena); 98.6D es un valor de punto flotante de doble precisión de 64 bits (doble); y 89L es un entero largo de 64 bits (largo). No sabemos el tipo de edad. Utilice jshell para experimentar. Puede probar fácilmente estas y otras expresiones simples utilizando jshell. Por ejemplo, ingrese 52 en el indicador jshell> y recibirá algo como el siguiente resultado:$1 ==> 52$1 es el nombre de una variable temporal que jshell crea para almacenar 52. (Las variables temporales se crean cada vez que se ingresan literales .) Ejecute System.out.println($1) y verá 52 como resultado. Puede ejecutar jshell con el argumento de línea de comandos -v (jshell -v) para generar comentarios detallados. En este caso, ingresar 52 generaría el siguiente mensaje, que revelaría que la variable temporal $1 es de tipo int (entero de 32 bits):| variable scratch creada $1: intA continuación, intente ingresar la edad. En este caso, probablemente recibirá un mensaje de error indicando que no se encontró el símbolo. Java Shell supone que la edad es una variable, pero no conoce su tipo. Tendrías que incluir un tipo; por ejemplo, vea qué sucede si ingresa int edad. Cómo escribir expresiones compuestas Una expresión compuesta consta de una o más expresiones simples integradas en una expresión más grande mediante un operador, que es una secuencia de instrucciones representadas simbólicamente en el código fuente. El operador transforma su(s) operando(s) de expresión en otro valor. Por ejemplo, en 6 * 5, el operador de multiplicación[] transforma los operandos 6 y 5 en 30. Las expresiones compuestas se pueden combinar en expresiones más grandes. Por ejemplo, 6 * 5 + 10 presenta la expresión compuesta 6 * 5 y una expresión compuesta que consta de su producto, el operador de suma + y el número 10. El orden de evaluación (primero multiplicar y luego sumar) está dictado por la regla de precedencia de Java. , que veremos en breve. Acerca de los operadores y operandos de Java Los operadores de Java se clasifican por su número de operandos: Un operador unario tiene un operando, por ejemplo, menos unario (por ejemplo, -5). Un operador binario tiene dos operandos, ejemplos son la multiplicación y la suma. Un operador ternario tiene tres operandos; un ejemplo es el operador condicional (?:). Los operadores de Java también se clasifican por posición: un operador de prefijo es un operador unario que precede a su operando (por ejemplo, -5). Un operador sufijo es un operador unario que sigue a su operando (por ejemplo, edad++; — suma 1 al valor numérico de la edad). Un operador infijo es un operador binario o ternario entre los operandos del operador (por ejemplo, edad + 5). Otro ejemplo de jshell. Presentaré más operadores en las siguientes secciones, donde presento ejemplos en forma de aplicaciones. También puedes probar estos operadores con jshell, así:jshell> 6 + 2 $1 ==> 8 jshell> 7 * $1 $2 ==> 56 En este caso, primero ingresamos la expresión 6 + 2, que jshell evalúa, asignando el 8 resultante para raspar la variable $1. A continuación, multiplicamos $1 por 7, lo que almacena 56 en la variable temporal $2. Este ejemplo demuestra que puede utilizar variables temporales en expresiones Java. Tipos de operadores en Java A continuación, recorreremos todos los tipos de operadores en Java. Después de presentar cada tipo de operador, presentaré un ejemplo que muestra cómo se usa en las expresiones Java. Operadores aditivos Los operadores aditivos aumentan o disminuyen un valor numérico mediante suma y resta. Los operadores aditivos incluyen suma (+), resta (-), postdecremento (–), postincremento (++), predecremento (–) y preincremento (++). La concatenación de cadenas (+) también se considera aditiva. Aquí hay una definición formal para cada uno de estos operadores: Suma: dado operando1 + operando2, donde cada operando debe ser de tipo carácter o numérico, suma operando2 al operando1 y devuelve la suma. Ejemplo: 4 + 6. Resta: Dado operando1 – operando2, donde cada operando debe ser de tipo carácter o numérico, resta el operando2 del operando1 y devuelve la diferencia. Ejemplo: 4 – 6. Postdecremento: Dada la variable–, donde la variable debe ser de tipo carácter o numérico, reste 1 del valor de la variable (almacenando el resultado en la variable) y devuelva el valor original. Ejemplo: x–;. Postincremento: dada la variable ++, donde la variable debe ser de tipo carácter o numérico, agregue 1 al valor de la variable (almacenando el resultado en la variable) y devuelva el valor original. Ejemplo: x++;. Predecremento: dada –variable, donde la variable debe ser de tipo carácter o numérico, reste 1 de su valor, almacene el resultado en la variable y devuelva el nuevo valor disminuido. Ejemplo: –x;. Preincremento: Dada la variable ++, donde la variable debe ser de tipo carácter o numérico, agregue 1 a su valor, almacene el resultado en la variable y devuelva el nuevo valor incrementado. Ejemplo: ++x;. Concatenación de cadenas: dado el operando1 + operando2, donde al menos un operando es de tipo Cadena, agregue la representación de cadena del operando2 a la representación de cadena del operando1 y devuelva el resultado. Ejemplo: «A» + «B». Los operadores de suma, resta, postdecremento, postincremento, predecremento y preincremento pueden generar valores que desbordan los límites del tipo de resultado. Por ejemplo, sumar dos valores enteros positivos grandes de 64 bits puede producir un valor que no se puede representar en 64 bits. Los operadores aditivos de Java no detectan ni informan del desbordamiento resultante. Aplicación de ejemplo: Operadores aditivos El Listado 1 presenta una pequeña aplicación para jugar con los operadores aditivos de Java. Listado 1. Operadores aditivos en Java (AddOp.java)class AddOp { public static void main( Cadena[]argumentos) { System.out.println(125 + 463); System.out.println(2.0 – 6.3); edad total = 65; System.out.println(edad); System.out.println(edad–); System.out.println(edad++); System.out.println(–edad); System.out.println(++edad); System.out.println(«A» + «B»); } }Consulte Características elementales del lenguaje Java para obtener una introducción al uso de la herramienta javac del JDK para compilar el código fuente de Java y la herramienta java para ejecutar la aplicación resultante. Ejecute el siguiente comando para compilar el Listado 1:javac AddOp.java. Suponiendo que la compilación sea exitosa, debería observar un archivo AddOp.class en el directorio actual. Ejecute el siguiente comando para ejecutarlo: java AddOpAddOp responde produciendo el siguiente resultado: 588 -4.3 65 65 64 64 65 ABSestudiar este resultado ofrece información sobre los operadores postincremento, postdecremento, preincremento y predecremento. Para postincremento/postdecremento, el valor actual de la edad se genera antes de la operación de incremento/decremento. Para preincremento/predecremento, la operación se realiza y su resultado se almacena en edad, y luego se genera el nuevo valor de edad.Operador de índice de matrizEl operador de índice de matriz ([0] ) accede a un elemento de matriz proporcionando el índice (posición) del elemento. Este operador se coloca después del nombre de la variable de matriz, como en calificaciones[index](acceda al primer elemento de la matriz asignada a las calificaciones; el primer elemento se almacena en el índice 0). Aquí hay una definición formal: variable dada[1]
donde el índice debe ser de tipo entero (int), leer un valor o almacenar un valor en el elemento de almacenamiento de la variable en la ubicación del índice. Ejemplo: temperaturas[] El valor pasado al índice es un entero de 32 bits que es 0 o un valor positivo que oscila entre uno menos que la longitud de la matriz, lo que se indica agregando .length al nombre de la matriz. Por ejemplo, grados.longitud devuelve el número de elementos en la matriz asignada a las calificaciones. Aplicación de ejemplo: Operador de índice de matriz. El Listado 2 presenta el código fuente de una aplicación de ejemplo que le permite jugar con el operador de índice de matriz. Listado 2. Operador de índice de matriz en Java (ArrayIndexOp.java) clase ArrayIndexOp {público estático vacío principal (Cadena[] argumentos) {int[1]calificaciones = {89, 90, 68, 73, 79}; System.out.println(grados[1] ); Los grados[1]= 91; System.out.println(grados[index]); índice int = 4; System.out.println(grados[‘C’ – ‘A’]); System.out.println(grados[1D]); // System.out.println(grados[0] ); } }El Listado 2 es algo más interesante que el Listado 1. Después de crear una matriz unidimensional de cinco elementos (a través de un inicializador de matriz) y asignar la referencia de la matriz a grados, main() procede a acceder a varios elementos. Dos elementos son de especial interés: el índice del operador de índice de matriz debe ser, en última instancia, un entero de 32 bits (0 o un valor positivo). Puede especificar el nombre de una variable entera (por ejemplo, índice), que contiene el valor del índice, como índice. Puede especificar un cálculo que involucre literales de caracteres. (Más adelante en este tutorial presentaré las conversiones de tipos y descubrirá por qué ‘C’ – ‘A’ produce un número entero (2), que sirve como índice válido). El ejemplo final, que pasa 1D como índice al operador de índice de matriz, está comentado porque no se compilará. Si descomenta la línea e intenta compilar el Listado 2, recibirá un mensaje de error sobre tipos incompatibles: «posible conversión con pérdida de doble a int…» Compile el Listado 2 (javac ArrayIndexOp.java) y ejecute la aplicación (java ArrayIndexOp) . Debería observar el siguiente resultado: 90 91 79 68 Operadores de asignación El operador de asignación (=) asigna el valor de una expresión a una variable (por ejemplo, i = 6;), incluido un elemento de matriz (por ejemplo, x = 15;). La expresión y la variable deben ser compatibles con la asignación, lo que significa que sus tipos deben coincidir. Por ejemplo, no puede asignar un literal de cadena a una variable entera. Explicaré más sobre esto cuando hablemos de conversiones de tipos.