1. Integer
aula
Integer
també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 Integer
classe possui dois campos que contém os valores máximo e mínimo possíveis do int
tipo:
Campo | Descrição |
---|---|
|
Valor máximo possível do int tipo |
|
Valor mínimo possível do int tipo |
Às vezes, você deseja atribuir o menor ou o maior int
valor 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 Integer
classe 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 int em um Integer objeto |
|
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. Double
classe
Em geral, a Double
classe é semelhante à Integer
classe, apenas envolve um double
em vez de um int
. Também possui campos e métodos que nos interessarão. Considere alguns deles:
A Double
classe 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 double tipo |
|
Valor máximo possível do double tipo |
Infinidade
Se você dividir -1.0
por 0.0
, obterá infinito negativo. Se você dividir 1.0
por 0.0
, obterá infinito positivo. Você não apenas pode dividir a double
por 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á.10x
2x
1
MIN_EXPONENT == -1024
, o que significa , que é aproximadamente igual a2-1024
10-308
E claro, a Double
classe 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 double em um Double objeto |
|
Retorna o número obtido da string passada |
Curiosamente, existe um isInfinite()
método que retorna true
se 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. Character
classe
A Character
classe é 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. Boolean
classe
O Boolean
tipo é praticamente o mesmo que o boolean
tipo. As diferenças são mínimas.
Abaixo mostramos uma versão simplificada da Boolean
classe:
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 . Boolean true TRUE false FALSE |
O Boolean
tipo 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 boolean
tipo:
Código | Observação |
---|---|
|
A Boolean classe é 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 equals e == Isso também funcionará. |
Autoboxing funciona muito bem aqui. Isso significa que você pode usar esse tipo da mesma forma que o boolean
tipo - não há armadilhas a serem observadas.
Como está escrito | Como funciona |
---|---|
|
|
E aqui uma comparação dos tipos boolean
e 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 Boolean
objeto 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 Boolean
dentro 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 int
e an Integer
, o Integer
é convertido em an int
:
Como está escrito | Como funciona |
---|---|
|
|
Se você comparar dois Integer
objetos entre si, eles não serão convertidos em int
s:
Código | Saída do console |
---|---|
|
|
a == c
e , mas , porque quando comparamos e estamos comparando referências. O que é essencialmente o que esperaríamos.b == c
a != b
a
b
Surpresa
Mas se substituirmos 500
por 100
, obteremos um resultado completamente diferente:
Código | Saída do console |
---|---|
|
|
A questão aqui é que um novo Integer
objeto nem sempre é realmente criado durante o autoboxing . Os objetos são armazenados em cache para valores -128
por meio de 127
inclusive.
A Integer
classe 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 Integer
objeto 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 Boolean
tipo, seus valores TRUE
e FALSE
são constantes, portanto, também são essencialmente armazenados em cache.
GO TO FULL VERSION