2010-09-15 11 views
10

Soy nuevo en Java y tengo antecedentes de C. Estoy repasando el libro de Khalid Moughal. En la página 126 se da un ejemplo comoconcepto de punto de secuencia en java

int i = 10; 

    int k = ++i + --i; // ((++i) + (--i)). 

Esto viola claramente el concepto de punto de secuencia de C, que dice que no se puede cambiar el valor de una variable más de una vez con el mismo punto en la secuencia. Mi pregunta es, ¿se aplica la misma regla de punto de secuencia en java o no? Puede ser que haya tomado este ejemplo solo para explicar el concepto de operador unario de prefijo y su efecto secundario, pero un ejemplo que claramente viola una regla fundamental del lenguaje no se espera en un libro tan conocido como Khalid Moughal.

Así que confírmalo.

Espero que la gente lo tome con el espíritu adecuado.

Gracias,

Mawia

+2

C tiene un montón de equipaje por el hecho de que había docenas de compiladores y millones de programas existentes antes de que se escribiera el estándar, por lo que tenían que establecer el estándar de tal manera que no rompiese los programas que dependían del forma en que un compilador particular optimizó las cosas. Además, la optimización fue bastante primitiva, lo que explica la palabra clave 'register' que permite al programador realizar micro-optimizaciones que cualquier compilador decente puede hacer mejor. –

Respuesta

8

Mi pregunta es hace la misma regla se aplica en el punto de secuencia de java o no?

No, no hay puntos de secuencia en Java. El orden de evaluación (etc.) está bien definido en Java.

Lea también this answer.

+8

Aunque el orden está bien definido, debe tenerse en cuenta que a cualquiera que enseñe a escribir código como este se le debe revocar la licencia en el acto ... – EFraim

+0

@EFraim: ¡Verdad! :) –

+0

El segundo enlace ya no funciona. –

0

No, no hay ningún concepto de secuencia de puntos en java y el orden de está completamente definido. En general, las expresiones se evalúan de izquierda a derecha. Para la definición formal, puede leer JLS, sección 15.7 sobre el orden de evaluación. Ver this enlace.