Duvida no resultado

Olá pessoal,

o exemplo abaixo não entendi o resultado que é 8 …
Minha duvida no if quando tem & o que siginifica (and ou or) ?
E no for porque (z++ , x++) ?
Se alguém puder me ajudar agradeceria…

abs

class Ver {
	    public static void main(String [] args) {
	      int x = 0;
	      int y = 4;
	      for(int z=0; z < 3; z++, x++) {
	    	  
	        if(x > 1 & ++y < 10)
	          y++;
	      }
	      System.out.println(y);
	   }
	 }

Ola paribe,

Sua dúvida por estar acontecendo no:

if(x > 1 & ++y < 10)

Quando esse IF acontece, ele já incrementa o Y… siga os passos, já incrementando o valor do Y no IF que você verá o valor…

[]´s

Vamos lá, por partes:

& é um AND. A diferença entre o & e o && é que o && é de curto-circuito, ou seja, se o primeiro operando é falso, ele nem avalia o segundo. O & avalia os dois operandos, sempre.

As duas expressões no terceiro argumento do for fazem com que, ao fim de cada iteração, as duas variáveis sejam incrementadas.

Agora que já sabe isso, basta considerar o resultado:

O loop irá acontecer enquanto o z for menor que 3 e o z começa como 0.

Na primeira iteração, x é 0, que não é maior que 1. Mas, como o & não é o de curto-circuito, ele vai avaliar a segunda expressão assim mesmo, incrementando o valor de y, que era 4 e passa a ser 5. Mas, como x não é maior que 1, ele não entra no if e não incrementa y novamente. Então, ao fim da iteração, x e z são incrementados, o que faz com que x e y tenham o valor 1.

Na segunda iteração, x ainda não é maior que 1, então o y só será incrementado no if mesmo, ficando com o valor 6. Ao fim da iteração, x e z são incrementados novamente, assumindo o valor 2.

Na terceira iteração, x é maior que 1 e y (que, incrementado, assume o valor 7) é menor que 10. Assim, a condição do if é obedecida e y é incrementado novamente, assumindo o valor 8. Ao fim da iteração, x e z são incrementados mais uma vez e ficam com o valor 3.

Agora z não é mais menor que 3 (é igual), então o loop acaba e y é igual a 8.

Existem algumas outras peculiaridades sobre o &, dê uma olhada em http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5228

O “&” não um AND bit-a-bit?

Só quando se compara tipos inteiros.