Linguagem Java

Dicas e tutoriais sobre a linguagem Java

Linguagem Java


7. Variáveis


Variáveis de Saída

Qual a diferença entre os comandos System.out.println() e System.out.print()? A diferença é que o primeiro comando adiciona uma linha no fim da saída dos dados, enquanto o outro comando não, considere as declarações:

System.out.print("Hello ");
System.out.print("world!");
A saída no ecrã será:
Hello world!

Agora considere estas declarações:
System.out.println("Hello ");
System.out.println("world!");
A saída no ecrã será:
Hello
world!


Variáveis Primitivas vs. Referência

Neste momento sabe como declarar uma variável primitiva e atribuir-lhe um valor. Mas quanto às variáveis não primitivas? Por outras palavras e quanto aos objectos?

Na verdade não existem variáveis objecto, existem apenas variáveis de referência de objecto, sendo que contêm bits que representam uma maneira de aceder ao objecto. Assim, não contêm o objecto propriamente dito, mas algo como um ponteiro ou um endereço. Enquanto numa variável primitiva fica cheia de bits que representam o valor real da variável, uma variável de referência de objecto fica cheia de bits que representam uma maneira de chegar ao objecto.

Usa-se o operador ponto (.) numa variável de referência. Como mnemónica, para ajudar, diga assim: “Use o que está antes do ponto para me trazer o que está depois”. Por exemplo: myDino.dark(); Significa “use o objecto referenciado pela variável myDino para chamar o método dark()”.


Declaração, criação e atribuição de objectos

Vamos analizar o código seguinte que cumpre as três etapas que são a declaração, criação e atribuição de objectos:

Dino myDino = new Dino();

1ª Etapa Declare a variável de referência

Dino myDino = new Dino();

Solicita à JVM para alocar um espaço para uma variável de referência e nomeia essa variável como myDino. A variável de referência será sempre do tipo Dino.


2ª Etapa Crie um objecto

Dino myDino = new Dino();

Solicita à JVM para alocar um espaço para um novo objecto Dino no heap (falaremos no conceito de pilha “heap” mais tarde).


3ª Etapa Vincule o objecto e a referência

Dino myDino = new Dino();

Atribui, através do sinal de igual, o novo objecto Dino à variável de referência myDino


8. Operadores

Na linguagem Java existem diferentes tipos de operadores. Existem operadores aritméticos, lógicos e condicionais. Os operadores têm procedência, no caso de múltiplos operadores usados na mesma declaração, a JVM sabe qual o operador que é avaliado primeiro.


Operadores Aritméticos

Os operadores aritméticos são a adição, subtracção, multiplicação, divisão e resto da divisão, apresentando os símbolos: Adição + Subtracção - multiplicação * divisão / resto da divisão %


Operadores de Incremento e Decremento

Estes operadores são utilizados para fazer um incremento (++) ou decremento (--) de 1 (uma unidade) do valor armazenado na variável. Por exemplo no seguinte código as expressões são equivalentes.

contador = contador + 1; // incrementa o valor do contador de 1
contador++; // código equivalente

O operador incremento ou decremento pode ser colocado antes ou depois da variável, embora produza resultados diferentes. Assim tomando o exemplo anterior podemos ter:

contador++; //operador incremento depois da variável
++contador; // operador incremento antes da variável

Para esclarecer, apresentamos os seguintes dois exemplos, que ilustram a obtenção de resultados diferentes:

. . .
int i = 10;
int j = 3;
int k = 0;
k = ++j + i; //resultado de k = 4+10 = 14

- - -
int i = 10;
int j = 3;
int k = 0;
k = j++ + i; //resultado de k = 3+10 = 13
. . .

Conclusão as condições iniciais das variáveis i, j e k são iguais, nos dois casos, ou seja, têm respectivamente, os valores 10, 3 e 0. Assim ++j (o operador antes da variável) incrementa logo o valor passando de 3 para 4. No caso j++ (operador depois da variável) mantêm o valor 3 no resultado da expressão.


Operadores Relacionais

Os operadores relacionais comparam dois valores e determinam a relação entre esses valores. O resultado da avaliação é um valor booleano true ou false.

op1 > op2     op1 é maior que op2
op1 >= op2   op1 é maior ou igual a op2
op1 < op2     op1 é menor que op2
op1 <= op2   op1 é menor ou igual a op2
op1 == op2   op1 são iguais op2
op1 != op2    op1 são diferentes op2


Operadores lógicos

Os operadores lógicos têm um ou dois operadores booleanos e produz um resultado booleano. Existem em Java seis operadores lógicos: && (E lógico, ou AND na terminologia inglesa), & (E booleano lógico), || (OU lógico, ou OR na terminologia inglesa), | (OU booleano inclusivo), ^ (OU booleano exclusivo) e finalmente, ! (NÃO lógico, ou NOT na terminologia inglesa).

A expressão básica para uma operação lógica é:

x1 operador x2, onde x1, x2 podem ser expressões booleanas, variáveis ou constantes.

A diferença principal entre os operadores && e & é que o operador && suporta uma avaliação parcial, enquanto o operador & não suporta. Sendo dada a expressão exp1 && exp2, significa que o operador && avalia a exp1 e se esta for falsa retorna imediatamente o valor falso, sem testar a segunda expressão. Em contraponto o operador & avalia sempre as duas expressões independentemente do valor booleano da primeira expressão. Para situações onde sejam usados operadores de incremento ou de decremento nas próprias expressões, pode ser importante para o apuramento dos resultados finais destas variáveis.

Para não tornar demasiado extensa a explicação, não incluímos, as tabelas lógicas, conhecidas como tabelas de verdade, que poderão ser facilmente consultadas em qualquer manual de lógica.


Página anteriorPágina seguinte