¿El operador de asignación compuesta += siempre calcula el resultado correcto?
Descripción del problema
Los operadores de asignación en el lenguaje Java incluyen = y sus operadores extendidos +=, -=, *=, /= y otros operadores de asignación compuestos. Los operadores también pueden implementar cuatro operaciones aritméticas como suma, resta, multiplicación y división. ¿Puede decirme si el operador de asignación compuesta += siempre da el resultado correcto?
Respuestas de los expertos en capacitación en Java de Kunming Beida Jade Bird
El operador de asignación complejo se puede implementar mediante operaciones aritméticas y operaciones de asignación de variables, pero si no se presta atención al uso del complejo operador de asignación, es posible que haya errores de cálculo. Como resultado, algunos cálculos importantes causarán pérdidas graves, por ejemplo:
El banco no permite ninguna operación de depósito o retiro. Esto provocará graves pérdidas en algunos cálculos importantes, como:
Las operaciones de depósito y retiro del banco no permiten ningún error, de lo contrario provocará pérdidas económicas irreparables.
shortmoney1=30000;//declarar variable short
intmoney2=35000;?//Declarar variable int
dinero1+=dinero2;? //Utilice el operador += para calcular la suma de dinero1 y dinero2 y asignar un valor
Nota:
El valor de la salida de dinero1 en el ejemplo anterior es -536, que es no es consistente con el resultado esperado de 65000. Esto se debe a que el valor resultante excede el rango de datos cortos, la parte superior del valor se trunca automáticamente cuando se ejecuta la declaración dinero1+=dinero2. Esto se debe a que cuando se ejecuta la declaración dinero1+=dinero2, el valor del resultado calculado excede el rango de los datos de tipo corto, por lo que los bits altos se truncan automáticamente, lo que genera resultados incorrectos. Por lo tanto, debe tener especial cuidado al utilizar operadores de asignación compuestos. Si este ejemplo calcula la cantidad en el software, la pérdida será enorme.
Para el ejemplo anterior, si la declaración dinero1+=dinero2 se escribe como declaración dinero1=dinero1+dinero2, entonces el programa generará un error al compilar y el resultado del error anterior no ocurrirá.
Ejemplo:
shortmoney1=30000;//Declarar variable de tipo corto
intmoney2=35000;?//Declarar variable int
money1=money1+money2;?//Calcule la suma de money1 y money2,
Nota:
El ejemplo anterior provocará un error al compilar, por lo que no se generarán resultados. Si utiliza desarrollo integrado
Las herramientas de desarrollo como Eclipse también mostrarán una línea ondulada roja en el estado de cuenta dinero1=dinero1+dinero2; y aparecerán una pequeña bombilla y una pequeña bombilla en el lado izquierdo. del número de línea de la declaración
Un ícono marcado con una cruz roja. Haga clic en el ícono con el mouse para regresar a la visualización del mensaje de error que se muestra en la Figura 3. 12, para que puedas solucionar fácilmente los problemas del programa.
Comentarios de expertos
Ambos ejemplos anteriores se reducen a errores causados por desbordamiento. Por lo tanto, al programar, debe
considerar si se producirá un desbordamiento y debe lidiar con la posibilidad de desbordamiento; de lo contrario, se producirán resultados de error inesperados
e incluso causarán daños al empresa Pérdidas graves.