1. Integeraula
Integertambém é bom porque é uma classe, o que significa que pode ter campos e métodos. E, claro, tem eles. Muitos deles - dezenas deles. Aqui vamos considerar os mais básicos.
A Integerclasse possui dois campos que contém os valores máximo e mínimo possíveis do inttipo:
| Campo | Descrição |
|---|---|
|
Valor máximo possível do inttipo |
|
Valor mínimo possível do inttipo |
Às vezes, você deseja atribuir o menor ou o maior intvalor possível a uma variável. Para evitar sobrecarregar seu código com constantes incompreensíveis, você pode escrever isso claramente da seguinte maneira:
| Código | Descrição |
|---|---|
|
|
A Integerclasse também tem alguns métodos interessantes. Aqui estão eles:
| Métodos | Descrição |
|---|---|
|
Retorna uma string que é a representação hexadecimal do número |
|
Retorna uma string que é a representação binária do número |
|
Retorna uma string que é a representação octal do número |
|
Envolve o passado intem um Integerobjeto |
|
Retorna o número obtido da string passada |
Você encontrou anteriormente o Integer.parseInt()método estático. Vamos relembrar como funciona:
int name = Integer.parseInt(string);
Se uma string contendo um número (somente dígitos) for passada para o parseInt()método, ele analisará a string e retornará o número que ela contém.
O resto dos métodos também são úteis. Por exemplo, alguns deles podem converter um número passado em uma string contendo a representação binária, octal ou hexadecimal do número.
2. Doubleclasse
Em geral, a Doubleclasse é semelhante à Integerclasse, apenas envolve um doubleem vez de um int. Também possui campos e métodos que nos interessarão. Considere alguns deles:
A Doubleclasse tem seis campos interessantes:
| Campo | Descrição |
|---|---|
|
infinito negativo |
|
infinito positivo |
|
Expoente mínimo possível (2 x ) |
|
Expoente máximo possível (2 x ) |
|
Valor mínimo possível do doubletipo |
|
Valor máximo possível do doubletipo |
Infinidade
Se você dividir -1.0por 0.0, obterá infinito negativo. Se você dividir 1.0por 0.0, obterá infinito positivo. Você não apenas pode dividir a doublepor zero, mas também pode usá-lo para armazenar o resultado dessas operações.
Expoente de umdouble
Entender o expoente é fácil. Internamente, um duplo consiste em uma mantissa e um expoente. Mas aqui o valor do expoente não é , mas . Assim, se o expoente aumentar em , o valor total do número dobrará.10x2x1
MIN_EXPONENT == -1024, o que significa , que é aproximadamente igual a2-102410-308
E claro, a Doubleclasse tem métodos interessantes:
| Métodos | Descrição |
|---|---|
|
Retorna uma string que é a representação hexadecimal do número |
|
Verifica se o número passado é infinito. |
|
Verifica se o número passado éNaN |
|
Envolve o passado doubleem um Doubleobjeto |
|
Retorna o número obtido da string passada |
Curiosamente, existe um isInfinite()método que retorna truese o número passado for infinito positivo ou negativo.
O isNaN()método é semelhante — verifica se o número passado é NaN( Not-a-Number , uma constante especial que indica um valor indefinido).
3. Characterclasse
A Characterclasse é interessante principalmente por seu grande número de métodos utilitários estáticos que permitem verificar se os caracteres pertencem a várias categorias.
Exemplos
| Métodos | Descrição |
|---|---|
|
Verifica se um caractere é um caractere alfabético |
|
Verifica se o caractere é uma letra |
|
Verifica se o caractere é um dígito |
|
Verifica se o caractere é um espaço, uma quebra de linha ou uma quebra de página (códigos: 12, 13, 14) |
|
Verifica se o caractere é um espaço em branco: um espaço, tabulação, etc. |
|
Verifica se o caractere é minúsculo |
|
Verifica se o caractere é maiúsculo |
|
Converte o caractere para minúsculo |
|
Converte o caractere para maiúsculo |
Uma característica desses métodos é que eles funcionam com todos os alfabetos conhecidos: os algarismos arábicos são classificados como dígitos, etc.
4. Booleanclasse
O Booleantipo é praticamente o mesmo que o booleantipo. As diferenças são mínimas.
Abaixo mostramos uma versão simplificada da Booleanclasse:
| Código | Descrição |
|---|---|
|
Constantes: TRUEи Construtor de classe FALSE variável O método retorna o valor da variável interna Este método estático converte para e para . BooleantrueTRUEfalseFALSE |
O Booleantipo tem duas constantes (dois campos):
| Constantes da classe | Contraparte para o tipo booleano | Descrição |
|---|---|---|
|
|
verdadeiro |
|
|
falso |
Você pode trabalhar com eles da mesma forma que trabalha com o booleantipo:
| Código | Observação |
|---|---|
|
A Booleanclasse é a única classe que pode ser escrita dentro de uma condição |
|
Todas as três variáveis são iguais a true/TRUE |
|
As constantes podem ser comparadas usando ambos equalse == Isso também funcionará. |
Autoboxing funciona muito bem aqui. Isso significa que você pode usar esse tipo da mesma forma que o booleantipo - não há armadilhas a serem observadas.
| Como está escrito | Como funciona |
|---|---|
|
|
E aqui uma comparação dos tipos booleane Boolean:
boolean a = true;
Boolean b = true; // b will be equal to Boolean.TRUE
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // true (compared by reference, but they point to the same object)
Se você realmente precisa de um Booleanobjeto independente, então você precisa criá-lo explicitamente:
boolean a = true;
Boolean b = new Boolean(true); // New Boolean object
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // false (compared by reference, and they point to different objects)
Mais um exemplo, onde usaremos um Booleandentro de um if:
| Código | Observação |
|---|---|
|
Isso irá compilar e funcionar |
Isso irá compilar, mas não vai funcionar!
| Código | Observação |
|---|---|
|
Erro . Esta linha lançará uma exceção |
5. Cacheando valores durante o autoboxing
Existem algumas armadilhas relacionadas aos tipos de wrapper de número inteiro.
Como você já sabe, se compararmos an inte an Integer, o Integeré convertido em an int:
| Como está escrito | Como funciona |
|---|---|
|
|
Se você comparar dois Integerobjetos entre si, eles não serão convertidos em ints:
| Código | Saída do console |
|---|---|
|
|
a == ce , mas , porque quando comparamos e estamos comparando referências. O que é essencialmente o que esperaríamos.b == ca != bab
Surpresa
Mas se substituirmos 500por 100, obteremos um resultado completamente diferente:
| Código | Saída do console |
|---|---|
|
|
A questão aqui é que um novo Integerobjeto nem sempre é realmente criado durante o autoboxing . Os objetos são armazenados em cache para valores -128por meio de 127inclusive.
A Integerclasse possui um array oculto que armazena objetos: Integer(-128), Integer(-127), ... Integer(126),Integer(127)
Se você escrever Integer x = 128, o processo de autoboxing criará um novo objeto, mas se você escrever Integer x = 127, o processo de autoboxing recuperará o objeto existente do cache (do array).
Se você não deseja que o Integerobjeto venha do cache, deverá criá-lo explicitamente escrevendo:Integer x = new Integer(127);
Todos os tipos de wrapper têm esse cache: Integer, Long, Byte, Short, Boolean. Para o Booleantipo, seus valores TRUEe FALSEsão constantes, portanto, também são essencialmente armazenados em cache.
GO TO FULL VERSION