# Java data types: Os principais tipos de dados em Java

A linguagem de programação Java possui oito tipos de dados primitivos e muitos outros tipos de dados complexos. Cada tipo determina quais valores podem ser armazenados e representados dentro de uma variável, garantindo a eficiência, segurança e flexibilidade da aplicação em desenvolvimento. Em Java, todas as variáveis são associadas a tipos de dados específicos.

## Tipos de dados em Java

Toda [linguagem de programação](https://www.ionos.com/digitalguide/websites/web-development/web-programming-languages/ "Linguagens de programação web") possui diferentes tipos de dados, que contêm determinados objetos e operações definidas. Muitas vezes, esses tipos de dados são semelhantes, mas também há grandes diferenças entre as opções oferecidas por cada linguagem. Por exemplo, se fizermos uma comparação entre [Python e Java](https://www.ionos.com/digitalguide/websites/web-development/python-vs-java/ "Python vs. Java"), além dos diversos pontos em comum, também poderemos perceber diferenças em muitos aspectos, que tornam cada uma dessas linguagens mais apropriada para certas tarefas. A linguagem Java apresenta dois grupos distintos de tipos de dados: **tipos primitivos e tipos complexos** (ou “tipos por referência”). Esses tipos de dados em Java têm diferentes tamanhos e determinam quais valores podem ser armazenados em uma variável.

Enquanto os tipos de dados primitivos só podem **armazenar valores simples**, os tipos por referência são utilizados para **criar estruturas mais complexas** e **organizar e manipular grandes volumes de dados**. Se você quer [aprender programação](https://www.ionos.com/pt-br/digitalguide/sites-de-internet/desenvolvimento-web/aprender-programacao-introducao-basica/ "Aprender programação: Introdução básica"), é importante não só conhecer os diversos tipos de dados em Java, mas também saber o melhor modo de empregá-los. As diferenças estão tanto na gama de funções disponíveis, quanto no espaço de memória que você pode poupar usando o tipo certo de dados.

## Tipos de dados primitivos em Java

Em Java, existem ao todo oito [tipos de dados primitivos](https://www.ionos.com/pt-br/digitalguide/sites-de-internet/desenvolvimento-web/java-primitives/), que contêm faixas de valores definidas e inalteráveis. Eles podem ser divididos em quatro categorias: **tipos de dados lógicos**, **tipos de dados inteiros** (ou integrais), **tipos de dados de vírgula** (ou ponto flutuante) e **tipos de dados de caracteres**. Eles não possuem outras propriedades especiais e também são chamados de “tipos de dados elementares”. Cada tipo de dados tem um número fixo de bits. A seguir, vamos conhecer mais de perto os Java data types primitivos. Esses tipos elementares são os seguintes:

- boolean
- byte
- short
- int ou integer
- long
- float
- double
- char

### boolean

[Java boolean](https://www.ionos.com/pt-br/digitalguide/sites-de-internet/desenvolvimento-web/java-boolean/) não é um tipo de dados numérico. Em vez de números, ele tem apenas dois valores possíveis: ***true* (verdadeiro) e *false* (falso)**. Portanto, ele é utilizado para determinar se uma condição se aplica (*true*) ou não se aplica (*false*). Seu valor-padrão é *false* e ele pertence à categoria dos tipos de dados lógicos. Ele tem o tamanho de 1 bit e a seguinte sintaxe:

```java
boolean booleanVar;
```

### byte

byte é um tipo de dados inteiro e um valor de complemento de dois com tamanho de 8 bits, ou seja, 1 byte. Ele é usado principalmente para poupar memória em matrizes (*arrays*) maiores. Sua faixa de valores vai **de -128 a 127** e seu valor-padrão é 0. Esta é a sintaxe do byte:

```java
byte byteVar;
```

### short

short é outro Java *data type* inteiro, que também é utilizado, sobretudo, para economizar memória em matrizes maiores. O complemento de dois em si tem 16 bits ou 2 bytes de tamanho e sua faixa de valores compreende **de -32768 a 32767**, incluindo esse último valor. Seu valor-padrão também é 0. Ele é escrito da seguinte forma:

```java
short shortVar;
```

### int ou integer

int ou integer também é um valor de complemento de dois e um tipo de dados inteiro, com 4 bytes ou 32 bits de tamanho. Sua faixa de valores inclui números inteiros **entre -2147483648 e 2147483647**, sendo que o valor-padrão é 0. Assim é a sintaxe do int:

```java
int intVar;
```

### long

long é o maior dos Java data types inteiros – tanto em termos da sua faixa de valores, que vai **de -9223372036854775808 a 9223372036854775807**, quanto do seu tamanho em si: 8 bytes ou 64 bits. Portanto, esse complemento de dois é utilizado quando os outros tipos de dados inteiros não são suficientes. Porém ele é, de longe, o que exige mais espaço em memória. Ele tem o valor-padrão 0 e a sintaxe abaixo:

```java
long longVar;
```

### float

float é um tipo de dados de vírgula (ou ponto) flutuante, utilizado para armazenar números reais. Ele tem 32 bits de tamanho e corresponde ao padrão IEEE 754, que define a representação de números binários e decimais de vírgula flutuante em computadores. O valor-padrão do float é 0,0 e sua faixa de valores pode incluir **até sete casas decimais**. Entretanto, o float é menos preciso do que o double e, por isso, não deve ser usado para valores em que a precisão é fundamental. Se você não necessita de valores muito exatos, pode optar pelo float para poupar espaço. Sua sintaxe é assim:

```java
float floatVar;
```

### double

O double cumpre uma função semelhante ao float, porém com cerca do dobro da precisão. Ele tem 64 bits de tamanho e pode representar **até 16 casas decimais**. Seu valor-padrão também é 0,0. Se você pretende trabalhar com valores exatos, sempre vale a pena usar o double, embora mesmo esse tipo de dados não possa oferecer uma exatidão perfeita. Caso sua aplicação exija valores extremamente precisos, é melhor recorrer à classe BigDecimal. Esta é a sintaxe do double:

```java
double doubleVar;
```

### char

char é um tipo de dados de caracteres. Ele armazena caracteres com base no conjunto de caracteres Unicode e, assim, possibilita a portabilidade para muitas plataformas diferentes. Cada caractere requer 2 bytes de espaço em memória. Sua faixa de valores corresponde ao código ASCII (Código-Padrão Americano para Intercâmbio de Informações) e situa-se **entre “\\u0000” (ou seja, 0) e “\\uffff” (equivalente a 65535)**. O valor-padrão do char é “\\u0000” e sua sintaxe tem este aspecto:

```java
char charVar;
```

## Tipos de dados complexos em Java

O segundo grupo de tipos de dados em Java são os chamados tipos complexos, ou tipos por referência. Eles têm esse nome porque **se referem a objetos**. Ao contrário dos tipos de dados primitivos, eles geralmente não são predefinidos, mas sim especificados pelo programador (uma exceção é o tipo String). Eles são capazes de utilizar métodos e também podem ter o valor 0 (significando “vazio”). Enquanto os tipos de dados primitivos são escritos com inicial minúscula, os tipos por referência têm inicial maiúscula. Abaixo, apresentamos os tipos por referência mais importantes:

### Strings

String é uma classe utilizada para representar uma **cadeia de caracteres**. Isso, entre outros aspectos, distingue esse tipo de dados complexo do tipo primitivo char. A cadeia de caracteres existe como objeto na classe java.lang. Utilizando os diversos métodos da classe String, você pode analisar caracteres individuais na cadeia, comparar strings entre si, bem como pesquisar e copiar strings. Uma string sempre é inscrita entre aspas retas. A sintaxe desse tipo por referência é assim:

```java
<tipo_de_string> <variável_de_string> = "<sequência de caracteres da string>";
```

Vejamos um exemplo do funcionamento de strings neste trecho de código:

```java
// Para criar uma string sem um novo operador
String a = "Esta é sua nova string";
// Para criar uma string com um novo operador
String a1 = new String ("Esta é sua nova string");
```

### Arrays

*Arrays* (ou matrizes) são utilizadas para **armazenar vários valores dentro de uma mesma variável**, em vez de criar variáveis diferentes para cada valor individual. Elas são identificadas por colchetes (\[\]). Já os valores armazenados são inscritos entre chaves ({}) e separados por vírgulas. Esta é a sintaxe de uma *array*:

```java
tipo_de_dados[] nome_da_array = {valor1, valor2, valor3,…};
```

Para criar uma *array* com strings, use a estrutura do exemplo abaixo:

```java
String[] cores = {"azul", "vermelho", "amarelo", "roxo"};
```

Se você deseja criar uma *array* com números inteiros, pode fazer como neste exemplo:

```java
int[] números = {5, 10, 15, 20};
```

### Classes

Classes são Java data types que **servem como modelo** para a criação de objetos. Elas possuem diversos componentes, como o nome da classe, seu modificador e um corpo inscrito entre chaves. Na prática, um exemplo seria assim:

```java
public class Main {
	int a = 10;
}
```

### Interfaces

Em Java, uma interface é uma **classe abstrata**. É que ela atua como uma interface, que permite que uma classe acesse diferentes funções. Para que isso seja possível, contudo, a classe precisa, primeiramente, implementar a interface. Interfaces pode conter somente constantes e métodos abstratos. Elas apresentam a seguinte sintaxe:

```java
interface {
	métodos abstratos
}
```

Para entender o funcionamento de uma interface, vejamos um exemplo simples:

```java
interface Pizza {
	public void ingredientes();
	public void preparo();
}
class Funghi implements Pizza {
	public void ingredientes() {
		System.out.println("Cogumelos, molho de tomate, orégano, mussarela");
}
public void preparo(){
	System.out.println("Após 15 minutos no forno, a pizza está pronta");
}
}
class Main {
	public static void main(String[] args) {
		Funghi myFunghi = new Funghi();
		myFunghi.ingredientes();
		myFunghi.preparo();
	}
}
```

O resultado correspondente, ao utilizar o [comando Java](https://www.ionos.com/digitalguide/websites/web-development/java-commands/ "Comandos Java") `System.out.println`, seria este:

```java
Cogumelos, molho de tomate, orégano, mussarela
Após 15 minutos no forno, a pizza está pronta
```

### Objetos

Objetos também são Java data types complexos. Eles são **instâncias de classes** que podem interagir entre si utilizando métodos. No próximo exemplo, criamos vários objetos dentro de uma classe Main:

```java
public class Main {
	int a = 10;
public static void main(String[] args) {
	Main myObj1 = new Main();
	Main myObj2 = new Main();
	System.out.println(myObj1.a);
	System.out.println(myObj2.a);
	}
}
```

Este seria o resultado do código acima:

```java
10
10
```

### Enums

[Enums](https://www.ionos.com/pt-br/digitalguide/sites-de-internet/desenvolvimento-web/java-enums/) são uma classe especial que permite **incorporar constantes inalteráveis em um código**. Essas variáveis recebem valores fixos, que não podem ser modificados posteriormente. Esse tipo de dados em Java é especialmente útil se você precisa de variáveis com somente alguns estados possíveis. Esta é a sintaxe de um Enum:

```java
enum Nome_da_classe {
	VALOR1,
	VALOR2,
	VALOR3
}
```


This is a markdown version of: [https://www.ionos.com/pt-br/digitalguide/sites-de-internet/desenvolvimento-web/java-data-types/](https://www.ionos.com/pt-br/digitalguide/sites-de-internet/desenvolvimento-web/java-data-types/) for AI/LLM consumption.