Duvida de operadores

Olá pessoal estou com a seguinte duvida em uma operação e não consegui uma boa explicação para o ocorrido, gostaria de discutir o resultado com vocês .

A seguinte expressão abaixo tem o resultado igual a 5

y=8;
x = (++y==y)?5:4; 

Ele incrementa e depois realiza a operação de igualdade corrreto !

agora se eu faço a expressão abaixo o resultado e 4 :

x = (y++==y)?5:4;

A duvida é , ele antes de fazer o incremento ele realiza a operação de igualdade ou seja ( 8 == 8 ) isso seria verdadeiro, o resultado pra mim teria que ser 5 e só depois realizar o incremento correto !?!?

valeu !

Primeira coisa - saiba que existe esse tipo de coisa (pré-incremento, pós-incremento), mas não a use em código que não seja para estudar para certificação de Java 1.4 (na prova de 5.0 ou 6.0 não deve cair esse tipo de coisa estúpida, própria de professores que nunca se atualizaram desde que apareceu o Java 1.0 :stuck_out_tongue: - pelo menos não me lembro de tais questões na vez em que fiz o SCJP 5.0…)

Segunda coisa:

++ y equivale a:
y = y + 1; use o valor de y;
e
y++ equivale e:
use o valor de y; y = y + 1 (depois que a expressão inteira for avaliada).

Se você aprender direitinho como é que funciona isso (decorar essa regra de equivalência), nem precisa perguntar mais.

seria algo do tipo :

  y = (y + 1) == y 

public class PrePostIncrement {

	public static void main(String[] args) {
		int x, y;
		int tmp;
		
		y=8;
		x = (++y==y)?5:4;
		System.out.println (x); // imprime 5
		// O código acima equivale a:
		y = 8;
		y = y + 1;
		x = (y == y) ? 5 : 4; 
		System.out.println (x); // imprime 5
		
		// Esta expressão é mais chata e mais difícil de entender.
		// Vou quebrá-la em partes.
		y = 8;
		x = (y++==y)?5:4;
		System.out.println (x); // imprime 4
		// Aqui temos a seqüência equivalente de operações.
		y = 8;
		tmp = y;
		y = y + 1;
		x = (tmp == y) ? 5 : 4;
		System.out.println (x); // imprime 4
	}
	
}

Como eu já disse, esse tipo de coisa é extremamente sutil, portanto eu aconselho que isso seja estudado mas não faça parte da sua vida do dia-a-dia. Se achar uma porcaria dessas em um código em que você vai fazer manutenção, grite, esperneie, veja o que ele realmente faz, e troque por um código mais compreensível.

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/operators.html

:wink: valeu agora fico entendido ! Realmente são expressões bem chatas de serem avaliadas;

Agradeço pela ajuda !