Operadores de atribuição

Procure saber quando uma conversão implícita irá acontecer, quando a conversão explícita é obrigatória e quando poderá haver cortes. Não se esqueça que uma variável de referência não é um objeto e sim uma maneira de se chegar ao objeto.

Operadores de atribuição compostos

Somente os 4 mais utilizados (+=, -+, *= e /=) poderão ser cobrados no exame. Veja alguns exemplos:

z = z-9;// corresponde a z -=9

a = a+1*6;// corresponde a a +=1*6

a *=1+6;

A expressão à direita é colocada entre parênteses. Sendo assim, a avaliação é feita do seguinte modo:

a *=(1+6);

a*=7;

a = a*7;

Analise um exemplo mais elaborado:

package br.devmedia;



public class Executavel {



/**

* @param args

*/

public static void main(String[] args) {

int y = 2;

y *=2+2;

System.out.print(y+" ");

int z = 5;

z /=2+3;

System.out.print(z+" ");

int a = 15;

a %=1+5;

System.out.println(a);

}

}

Saída: 8 1 3

Operadores de comparação

É essencial que você tenha em mente que o exame aborda os seguintes operadores de comparação: </, <=, >, >=, ==, !=. Os operadores de comparação, em todos os casos, resultam em um valor booleano, isso quer dizer, false ou true.

Cada comparação pode envolver 2 números, incluindo o tipo char, duas variáveis de referência ou dois valores booleanos.

boolean b = (11>2)==(1>0);

System.out.println("Value of b:"+b);

Não tem sentido em compararmos tipos incompatíveis como um char com um long. É válido que você compreenda que o código a seguir é válido:

package br.devmedia;

public class Main {

public static void main(String args []){

boolean x;

if(x=true){

System.out.println("true");

}

}

}

A variável x não está sendo comparada com true, mas sim está sendo atribuida como true, então será impresso: “true”.

Enums e igualdade

Após a declaração de um enum, ele não pode ser expandido, ou seja, eles são imutáveis. Em tempo de execução, é impossível criar novas constantes enum.

Podemos usar o método equals() ou o operador == para verificar se duas variáveis se referem a mesma constante enum.

package br.devmedia;



public class EnumIgual {



enum Color{VERDE, AMARELO}

public static void main(String []args){

Color color1 = Color.VERDE;

Color color2 = Color.VERDE;

if(color1==color2){

System.out.println("color1==color2");

}

if(color1.equals(color2)){

System.out.println("color1 equals color2");

}

}

}

Console:

color1==color2

color1 equals color2

instanceOf

O operador instanceOf é utilizado apenas com variáveis de referência e permite saber se um objeto é de um tipo específico.

Sempre é retornado verdadeiro se o objeto comparado (superclasse) puder ser atribuído ao outro (subclasse). Ele também auxilia, protegendo contra uma conversão inválida. Veja abaixo:

package br.devmedia;



interface Empregavel{}

class Funcionario implements Empregavel{}

class Chefe extends Funcionario{}

class Dono extends Chefe{}

public class Principal {



/**

* @param args

*/

public static void main(String[] args) {

Dono dono = new Dono();

System.out.println(dono instanceof Empregavel);



}



}

O programa acima imprime true. É impossível utilizar o operador instanceOf para realizar testes envolvendo 2 hierarquias de classes diferentes.

Operação de concatenação de Strings

A avaliação do operador é feita sempre da esquerda para direita. Se uma String estiver participando da operação, o resultado será uma String.

Decremento/Incremento

  • Pré-incremento -> a=++b -> Primeiramente incrementa e depois o valor é utilizado.
  • Pós-incremento -> a=b++ -> Primeiramente o valor é utilizado e em seguida é incrementado.

Para a prova, fique atento com perguntas que usem os operadores de decremento e incremento em uma variável final. Já variáveis final não podem ser modificadas, os operadores de incremento/decremento não podem ser utilizados e qualquer tentativa causará um erro de compilação.

Na próxima parte do artigo abordaremos mais operadores e instruções if e switch.


Leia todos artigos da série