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.
| 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) |
É 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;
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 é 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
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.
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
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
Teste seus conhecimentos sobre constantes e conversão de tipos:
Reforce o conteúdo desta aula com mais dois exercícios práticos: