Existem 8 (ou 9 se consideramos como um tipo primitivo) tipos primitivos em Java. Essas variaveis NÃO são objetos, mas são tipos mais básicos, e especificam apenas o tamanho e a categoria de valores de variáveis e não contém métodos adicionais.
Cada um desses tipos primitivos tem uma classe específica para criar objetos do valor do tipo primitivo, e essas classes são chamadas "wrapper". Por exemplo, o tipo primitivo int
tem uma classe wrapper chamada Integer
. E a classe Integer
tem métodos para manipular, alterar, etc... o valor do int
que a classe Integer
guarda por dentro.
O beneficio é que podemos evolver a utilidade de um valor primitivo usando a classe wrapper, de tal tipo.
-
Eles convertem tipos de dados primitivos em objetos. Os objetos são necessários se precisamos modificar os argumentos passados para um método (porque os tipos primitivos são passados por valor).
-
Muitas classes no pacote java.util lidam apenas com objetos e, portanto, as classes wrapper também são necessárias la.
- Classes comuns como List, Map, Set, Collection, ArrayList e Vector, e muitos outros armazenam apenas objetos e não tipos primitivos. O motivo é que essas classes trabalhar com tipos de referência, que podem ser alterados dentro do método, mas tipos primitivos não podem ser alterados dentro do método, para alterar valor de um tipo primitivo, tem que reassinar um novo valor ao variável.
-
Um objeto é necessário para oferecer suporte à sincronização em multithreading.
-
Os tipos primitivos são mais rápidos do que os wrappers, por não ser objetos. Mas isso depende do JDK (ou JVM) usado, por que alguns JVMs otimizam o uso de wrappers, e convertem para tipos primitivos quando possível, e outros não.
-
Os tipos primitivos não podem ser nulos, mas objetos podem ser nulos. Todos os tipos primitivos têm um valor padrão se não for inicializada. Por exemplo, um
int
é 0, umboolean
é false, umchar
é '\u0000'. -
Os tipos primitivos não têm métodos, mas os wrappers têm métodos. Primitivos podem ter propriedades, mas não métodos.
-
Tipos primitivos são predefinidos (por exemplo,
int
,boolean
,char
), e não é possivel criar um tipo primitivo.
Você pode criar classes, interfaces, enums ou annotations que utilizam tipos primitivos internamente, mas você não pode criar um tipo primitivo em Java, a menos que que você cria o seu próprio JVM que suporta essa funcionalidade.
Categoria | Tipo | Wrapper | Tamanho byte / bits |
Min | Max | Exemplo de uso |
---|---|---|---|---|---|---|
Integer | byte | Byte | 1 byte (8 bits) | -128 | 127 | byte b = 65; |
char | Character | 2 bytes (16 bits) | Um caracter Unicode | char c = 'A'; |
||
short | Short | 2 bytes (16 bits) | -32.768 | 32.767 | short s = 65; |
|
int | Integer | 4 bytes (32 bits) | -2.147.483.648 | 2.147.483.647 | int i = 65; |
|
long | Long | 8 bytes (64 bits) | -9.223.372,03.854.775.808 | 9.223.372.036.854.775.807 | long l = 65L; |
|
Floating Point | float | Float | 4 bytes (32 bits) | 3,40282347 x 1038 | 1,40239846 x 10-45 | float f = 65f; |
double | Double | 8 bytes (64 bits) | 1,7976931348623157 x 10308 | 4,9406564584124654 x 10-324 | double = d = 65.55; |
|
Lembre-se: float e double NUNCA podem ser usados para tratar valores moneatarios. Não importa se usa wrapper ou não. Existem classes especificas para isso. | ||||||
Outros | boolean | Boolean | 1 byte (8 bits) | false | true | boolean b = false; |
void | Void | Void não tem nem valor ou tamanho especifico. Normalmente usados para indicar metodos sem valor de retorno |
A diferença entre uma classe e um objeto é que uma classe é um modelo para um objeto. Um objeto é apenas uma instância criada de uma classe. Uma classe é uma categoria de dado, e um objeto é uma variável da tal classe. Ou seja, a classe é uma receita de bolo, e o objeto é o bolo.
Para criar uma classe em Java, basta usar a palavra reservada class
seguida do nome da classe. Por convenção, o nome da classe deve começar com letra maiúscula. A classe pode conter atributos e métodos. Atributos são variáveis que pertencem a classe, e métodos são funções que pertencem à classe. A classe pode conter atributos e métodos privados, protegidos e públicos. Atributos e métodos privados só podem ser acessados na classe. Atributos e métodos protegidos só podem ser acessados na classe e de classes filhas. Atributos e métodos públicos podem ser acessados de qualquer lugar.
package br.dev.free.tipos;
// Definição de uma classe chamada Carro.
public class Carro {
private String marca;
private String modelo;
private int ano;
public void ligar() {
this.ligado = true;
}
public void desligar() {
this.ligado = false;
}
public void imprimir() {
System.out.println("Marca: " + this.marca);
System.out.println("Modelo: " + this.modelo);
System.out.println("Ano: " + this.ano);
System.out.println("Ligado: " + this.ligado);
}
}
// Criação de um objeto da classe Carro.
Carro carro = new Carro();
carro.imprimir(); // Vai imprimir os valores padrão dos atributos da classe Carro.