i = i + 1 dado i + = 1 división

¿Hay un signo de interrogación negro lleno de cerebros? Si es así, haz clic en una ola de atención :)

Al principio, yo también tenía una cara de tonto. Con la acumulación de conocimiento, tuve nuevos pensamientos y los grabé solo como referencia.

 En términos de eficiencia de ejecución, i + = 1 es mejor

Primero veamos un fragmento de código

public class PlusEqualTest {
  void m1() {
    int i = 0;
    i+=1;
  }

   void m2() {
    int i = 0;
    i=i+1;

  }

}

La eficiencia de ejecución se basa en la perspectiva de la JVM, así que use javap -verbose xxx.class para traducir el archivo de código de bytes en forma de instrucciones, que es más fácil de entender.

Aquí solo muestro parte de las instrucciones en m1 m2

void m1();
    0: iconst_0
    1: istore_1
    2: iinc          1, 1
    5: return

  void m2();
    0: iconst_0
    1: istore_1
    2: iload_1
    3: iconst_1
    4: iadd
    5: istore_1
    6: return

Obviamente, se puede ver que hay menos pasos de ejecución para i + = 1. Explique el significado de las instrucciones en m1 m2

m1:

  1. Empuje la constante 0 en la pila de operaciones
  2. Guarde los datos en la primera cuadrícula de la tabla de variables locales
  3. Agregue 1 a la primera cuadrícula de la tabla de variables locales y guarde

m2:

  1. Insertar constantes en la pila de operaciones
  2. Haga estallar el elemento superior de la pila y guárdelo en la primera cuadrícula de la tabla de variables locales
  3. Empuje la primera cuadrícula en la tabla de variables locales en la pila de operaciones
  4. Empuje la constante 1 en la pila de operaciones
  5. Pop los dos primeros elementos en la pila de operaciones, y la CPU realiza la operación de adición
  6. Guarde el resultado en la primera cuadrícula de la variable local

Desde la perspectiva de la sintaxis de Java

i = i + 1 realizará la conversión automática de tipos durante la operación y luego realizará la asignación. Si el tipo de la derecha es más grande que el de la izquierda, se informará un error durante la compilación

i + = 1 evita la operación anterior, pero puede provocar un desbordamiento de la memoria (por ejemplo, i = 127)

Desde una perspectiva de codificación

i = i + 1 es más claro de un vistazo

En resumen, aunque la eficiencia de ejecución de i + = 1 es mayor, el jvm es lo suficientemente potente, no te preocupes por esta optimización, por lo que recomiendo usar i = i + 1

 

 

Supongo que te gusta

Origin blog.csdn.net/qq_28411869/article/details/88654210
Recomendado
Clasificación