AFF Education Construa seu Futuro

Aula 18 - Constantes versus Variáveis e mudança de tipos de variáveis

Constante versus variável (constante = não varia)

A principal diferença entre constante e variável em Java é que uma constante (declarada com final) não pode ter seu valor alterado após a primeira atribuição, enquanto uma variável pode ser atualizada várias vezes.

Em Java, uma constante é uma variável cujo valor não pode ser alterado depois de atribuído. Para declarar uma constante, utilizamos a palavra-chave final antes do tipo de dado.

Por convenção, os nomes das constantes são escritos em letras maiúsculas com palavras separadas por underscore (_).

public class ConstanteVsVariavel {
    public static void main(String[] args) {
        // Declarando uma variável
        int idade = 25;
        System.out.println("Idade inicial: " + idade);
        
        // Alterando o valor da variável
        idade = 26;
        System.out.println("Idade após atualização: " + idade);
        
        // Declarando uma constante usando a palavra-chave 'final'
        final double PI = 3.14159;
        System.out.println("\nValor de PI: " + PI);
        
        // Tentativa de alterar uma constante causaria erro de compilação
        // PI = 3.14; // Erro: não é possível atribuir um valor a uma variável final
        
        // Outro exemplo: constante para velocidade da luz
        final int VELOCIDADE_LUZ = 299792458; // metros por segundo
        System.out.println("Velocidade da luz: " + VELOCIDADE_LUZ + " m/s");
        
        // Constante para valor máximo
        final String NOME_EMPRESA = "Minha Empresa Ltda.";
        System.out.println("Nome da empresa: " + NOME_EMPRESA);
    }
}

Idade inicial: 25

Idade após atualização: 26

Valor de PI: 3.14159

Velocidade da luz: 299792458 m/s

Nome da empresa: Minha Empresa Ltda.

Comparação entre variável e constante

Característica Variável Constante (final)
Declaração tipo nome = valor; final tipo NOME = valor;
Alteração de valor Permitida Não permitida
Convenção de nomenclatura camelCase (ex: taxaJuros) SNAKE_CASE_MAIÚSCULO (ex: TAXA_JUROS)
Uso típico Dados que mudam durante a execução Valores fixos que não devem mudar
Inicialização Pode ser feita posteriormente Deve ser feita na declaração ou no construtor (para classes)

Quando usar constantes

É recomendado usar constantes em vez de variáveis nos seguintes casos:

Dica de boas práticas: Em vez de usar valores literais diretamente no código (números mágicos), use constantes com nomes descritivos. Isso torna o código mais legível e facilita a manutenção.

Por exemplo, em vez de:

double areaCirculo = raio * raio * 3.14159;

Use:

final double PI = 3.14159;
double areaCirculo = raio * raio * PI;

Mudança de tipos de variáveis

Em Java, às vezes precisamos converter valores entre diferentes tipos de dados. Um caso comum é a conversão de Strings que representam números em tipos numéricos como int ou double para realizar operações matemáticas.

Casting

Casting é o processo de converter um valor de um tipo de dado para outro. Em Java, existem dois tipos principais de casting:

public class CastingExemplo {
    public static void main(String[] args) {
        // Casting implícito: int para double
        int numeroInteiro = 10;
        double numeroDecimal = numeroInteiro; // Conversão automática
        System.out.println("Número decimal (após casting implícito): " + numeroDecimal);// Output: 10.0
        double meuDouble = 10.5;
        int meuInt = (int) meuDouble;
        System.out.println("Número inteiro (após casting explícito): " + meuInt); // Output: 10
    }
        

Número decimal (após casting implícito): 10.0

Número inteiro (após casting explícito): 10

Número entre aspas em uma String

Um número entre parênteses declarada em String não é um número, mas um texto com algarismos numéricos e não podemos fazer operações matemáticas com a variável que guarda esse tipo de String.

public class NumeroComoString {
    public static void main(String[] args) {
        // Número como valor numérico (int)
        int numero = 123;
        System.out.println("Número como int: " + numero);
        
        // Operação com número
        int resultadoSoma = numero + 10;
        System.out.println("Resultado da soma (numero + 10): " + resultadoSoma);
        
        // Número como texto (String)
        String numeroTexto = "123";
        System.out.println("\nNúmero como String: " + numeroTexto);
        
        // Não podemos fazer operações matemáticas com Strings diretamente
        // O código abaixo NÃO funcionaria:
        // int resultadoErrado = numeroTexto + 10; // Erro de compilação
        
        // Se tentarmos concatenar, o resultado será diferente do esperado
        String resultadoConcatenacao = numeroTexto + 10;
        System.out.println("Resultado da concatenação (numeroTexto + 10): " + resultadoConcatenacao);
    }
}

Número como int: 123

Resultado da soma (numero + 10): 133

Número como String: 123

Resultado da concatenação (numeroTexto + 10): 12310

Atenção: Note que ao "somar" o número 10 à String "123", o resultado foi "12310". Isso ocorre porque, quando usamos o operador + com uma String, ele realiza uma concatenação (junção de textos), não uma soma matemática.

Conversão de valor em String para int

Se nós queremos converter um número entre parênteses (uma String) em inteiro (int), precisamos usar o método parseInt().

A sintaxe fica: Integer.parseInt(argumentValue)

public class ConversaoStringParaNumero {
    public static void main(String[] args) {
        // Números como texto (String)
        String numeroTexto1 = "123";
        String numeroTexto2 = "456";
        
        // Concatenação de Strings (não é soma matemática)
        String resultadoConcatenacao = numeroTexto1 + numeroTexto2;
        System.out.println("Concatenação: " + numeroTexto1 + " + " + numeroTexto2 + " = " + resultadoConcatenacao);
        
        // Conversão de String para int usando Integer.parseInt()
        int numero1 = Integer.parseInt(numeroTexto1);
        int numero2 = Integer.parseInt(numeroTexto2);
        
        // Agora podemos realizar operações matemáticas
        int resultadoSoma = numero1 + numero2;
        System.out.println("\nSoma após conversão: " + numero1 + " + " + numero2 + " = " + resultadoSoma);
        
        // Outras operações matemáticas
        System.out.println("Subtração: " + numero1 + " - " + numero2 + " = " + (numero1 - numero2));
        System.out.println("Multiplicação: " + numero1 + " * " + numero2 + " = " + (numero1 * numero2));
        System.out.println("Divisão: " + numero1 + " / " + numero2 + " = " + ((double)numero1 / numero2));
        
        // Cuidado com strings que não contêm números válidos
}

Concatenação: 123 + 456 = 123456

Soma após conversão: 123 + 456 = 579

Subtração: 123 - 456 = -333

Multiplicação: 123 * 456 = 56088

Divisão: 123 / 456 = 0.26973684210526316

Conversão de String para double

Da mesma forma que podemos converter uma String para int, também podemos converter para double usando o método Double.parseDouble().

public class ConversaoStringParaDouble {
    public static void main(String[] args) {
        // Números decimais como texto (String)
        String numeroTexto1 = "123.45";
        String numeroTexto2 = "67.89";
        
        // Tentando concatenar (não soma)
        String resultadoConcatenacao = numeroTexto1 + numeroTexto2;
        System.out.println("Concatenação: " + numeroTexto1 + " + " + numeroTexto2 + " = " + resultadoConcatenacao);
        
        // Conversão de String para double usando Double.parseDouble()
        double numero1 = Double.parseDouble(numeroTexto1);
        double numero2 = Double.parseDouble(numeroTexto2);
        
        // Agora podemos realizar operações matemáticas
        double resultadoSoma = numero1 + numero2;
        System.out.println("\nSoma após conversão: " + numero1 + " + " + numero2 + " = " + resultadoSoma);
        
        // Outras operações matemáticas
        System.out.println("Subtração: " + numero1 + " - " + numero2 + " = " + (numero1 - numero2));
        System.out.println("Multiplicação: " + numero1 + " * " + numero2 + " = " + (numero1 * numero2));
        System.out.println("Divisão: " + numero1 + " / " + numero2 + " = " + (numero1 / numero2));
        
        // Nota: Em Java, o separador decimal é o ponto, não a vírgula
        // Se tentarmos converter uma string com vírgula como separador decimal,
        // ocorrerá um erro
}

Concatenação: 123.45 + 67.89 = 123.4567.89

Soma após conversão: 123.45 + 67.89 = 191.34

Subtração: 123.45 - 67.89 = 55.56

Multiplicação: 123.45 * 67.89 = 8381.9205

Divisão: 123.45 / 67.89 = 1.8183825306229195

Exercícios

Teste seus conhecimentos sobre constantes e conversão de tipos:

1. Qual palavra-chave é usada para declarar uma constante em Java?

2. Qual a convenção de nomenclatura para constantes em Java?

3. Qual método é usado para converter uma String para um número inteiro em Java?

4. O que acontece quando tentamos atribuir um novo valor a uma constante em Java?

5. Qual será o resultado da expressão "5" + 2 em Java?

Exercícios de Aplicação AFF Education

Reforce o conteúdo desta aula com mais dois exercícios práticos:

1. Como se declara uma constante para o valor de PI em Java?

2. O que ocorre ao tentar reatribuir final int MAX = 10; MAX = 20;?