Tipos de dados em Java: tipos de dados primitivos e não primitivos

Publicados: 2020-12-01

Índice

Introdução

Em qualquer linguagem de programação, um tipo de dados é uma atribuição de dados que permite ao computador ou compilador saber como os programadores desejam atribuir os dados. Um tipo de dados adiciona uma restrição às variáveis ​​ou a uma função ao atribuir valores.

Esses tipos de dados definem o comportamento dos dados, como a maneira como os valores desse tipo podem ser armazenados e as operações que podem ser feitas nos dados. Vamos dar uma olhada em todos os tipos de dados fornecidos por java.

Tipos de dados primitivos

Um tipo de dados primitivo não pode ser dividido em um tipo de dados mais simples. Java fornece 8 tipos de dados primitivos, vamos explorá-los!

Byte

Um byte é um tipo Integer que armazena números inteiros variando de -128 a 127, isso elimina os problemas de restrição de memória se você estiver lidando com números pequenos, pois requer apenas 1 byte de memória. Uma variável byte pode ser declarada usando a palavra-chave “byte”. Atribuir um valor superior a 127 a um byte gera um erro de “tipos incompatíveis”.

byte n1 = 98 ;

Sistema . fora . println(n1);

O trecho acima imprime 98 conforme o esperado.

Curto

Um short é um tipo Integer que armazena números inteiros que variam de -32768 a 32767, consome 2 bytes de memória do disco. Uma variável curta pode ser declarada usando a palavra-chave “short”. Atribuir um valor maior que 32767 a uma variável curta gera um erro de “tipos incompatíveis”.

curto n1 = 9876 ;

Sistema . fora . println(n1);

O trecho acima imprime 9876 como saída.

Int

Um int é um tipo inteiro que armazena números inteiros que variam de -2147483648 a 2147483647, ele consome 4 bytes de memória no disco. Geralmente, os programadores preferem usar um int para declarar uma variável que armazena valores numéricos. O compilador Java gera um erro de “tipos incompatíveis” se tentar atribuir um valor maior que o intervalo.

int n1 = 987654 ;

Sistema . fora . println(n1);

O trecho acima imprime 987654 como saída.

Grandes

Agora, isso é algo interessante tipo de dados que consome 8 bytes de memória no disco. É um tipo inteiro que armazena números inteiros que variam de -9223372036854775808 a 9223372036854775807, ufa, isso leva um tempo considerável para ler esse intervalo.

Isso é usado quando o tipo de dados int transborda para as operações que executamos. Lembre-se de que precisamos terminar o valor com um 'L' durante a atribuição.

n1 longo = 987654321098765L ;

Sistema . fora . println(n1);

O trecho acima imprime 987654321098765, conforme o esperado.

Flutuador

Float é um tipo de dados de ponto flutuante, o que significa que ele pode armazenar os valores, incluindo sua precisão decimal. Vamos supor que você tenha desenvolvido um código para anotar todos os seus gastos, mas você é bastante rigoroso e deseja acompanhar cada centavo gasto. Nesse caso, int não fará o trabalho porque int pode armazenar apenas números inteiros.

Precisamos de um tipo de dados de ponto flutuante para esta tarefa. Um float pode armazenar os números fracionários que variam de 3.4e-038 a 3.4e+038, ele pode armazenar até 7 dígitos de precisão decimal. Lembre-se que você deve terminar o valor com um 'f'.

float n = 98,76f ;

Sistema . fora . println(n);

O trecho acima imprime 98,76 como saída.

Leia: Propriedades e benefícios do JavaBeans: como você deve utilizar?

Dobro

Double é semelhante a float, mas como o nome diz é o dobro do float no caso de precisão decimal. Ele pode ter uma precisão decimal de 15 dígitos e pode armazenar números fracionários que variam de 1,7e-308 a 1,7e+308. Lembre-se que você tem que terminar o valor com um “d”.

Vamos percorrer um código para entender a diferença entre float e double.

classe pública Teste {

public static void main ( String args[])

{

float a1 = 1.f / 70 ;

flutuar b1 = 0 ;

duplo a2 = 1.d / 70 ;

duplo b2 = 0 ;

float f1 = 1f ;

duplo f2 = 1d ;

for ( int i = 0 ;i < 490 ;i ++ ){

b1 = b1 + a1;

b2 = b2 + a2;

if (i > 1 && i <= 50 ){

f1 = f1 * i;

f2 = f2 * i;

}

}

Sistema . fora . println(b1); //linha 1

Sistema . fora . println(b2); //linha 2

Sistema . fora . println(f1); //linha3

Sistema . fora . println(f2); //linha4

}

}

O cálculo manual da expressão “(1/70)*490” nos dá 7 como resposta, mas executá-lo em java usando float e double dá uma resposta diferente. No trecho acima, uma variável float e uma variável double são inicializadas com 1/70, e adicionar esse valor a outra variável 490 vezes deve nos dar 7 como resposta.

Ao executar o trecho acima, a linha 1 imprime 6,9999795, que tem uma precisão decimal de 7 dígitos, enquanto a linha 2 imprime 6,999999999999978, que tem uma precisão decimal de 15 dígitos. Portanto, se float não fornecer uma precisão decimal precisa, você poderá optar por double. Além disso, é mais provável que um float atinja o infinito, pois o alcance do float é menor quando comparado ao double.

Por exemplo, se você armazenar fatorial de um número consideravelmente grande, essa variável atingirá o infinito. A partir do trecho acima, podemos ver que existem duas variáveis ​​usadas para armazenar o fatorial de 50 e no momento em que imprimimos o resultado, a linha 3 imprime infinito e a linha 4 imprime 3,0414093201713376E64, então se float não atender ao seu intervalo, então você pode optar pelo dobro.

Tanto float quanto double podem ser usados ​​como números científicos com um 'e', ​​onde 'e' denota a potência de 10. Por exemplo, 3e2f é equivalente a 300.0 no tipo de dados float e 3e4d é equivalente a 30000.0 no tipo de dados double.

boleano

Um tipo de dado booleano pode ter apenas dois valores true e false. Ele é declarado usando a palavra-chave boolean em java. Esse tipo de dados geralmente é usado como uma variável de sinalizador para acompanhar as alterações que fazemos em um código. Por exemplo, definir o sinalizador como verdadeiro se um número for divisível por 2 senão falso.

sinalizador booleano = true ;

booleano b1 = false ;

Sistema . fora . println(bandeira); // imprime verdadeiro

Sistema . fora . println(b1); // imprime falso

Caracteres

Um tipo de dados char é usado para armazenar um único caractere, esse tipo de dados pode ser declarado usando a palavra-chave char. Lembre-se de que temos que colocar o caractere entre aspas simples durante a atribuição, ele pode armazenar caracteres minúsculos e maiúsculos em um tipo de dados char.

Armazenar mais de um caractere em um tipo de dados char gera um erro. Além disso, há um fato divertido em relação ao tipo de dados char que é, converter um caractere em um inteiro armazena o valor ASCII desse caractere e vice-versa também é verdade.

caractere c1 = ' um ' ;

caractere c2 = 66 ;

Sistema . fora . println(c1); //linha 1

Sistema . fora . println(c2); //linha 2

Sistema . fora . println(( int )c1); //linha3

Na linha 1 do trecho acima, imprime 'a' como saída, conforme o esperado. A linha 2 imprime 'B' como saída, pois 66 se refere a B na tabela ASCII. A linha 3 imprime 97 como saída, pois é o valor ASCII de 'a'.

Mas e se quisermos armazenar mais de um caractere? Chegaremos a eles nos próximos parágrafos.

Leia também: 17 ideias e tópicos interessantes de projetos Java para iniciantes

Tipos de dados não primitivos

Tipos de dados não primitivos em java também são chamados de tipos de referência porque se referem a objetos. Tipos de dados não primitivos são criados pelo programador e não são predefinidos. Como os não primitivos são chamados de objetos, eles podem ser atribuídos com null, o que não é um caso no tipo primitivo.

Ao contrário dos tipos de dados primitivos, um tipo de dados não primitivo deve começar com uma letra maiúscula. Todos os tipos de dados não primitivos são de tamanho igual e consomem a mesma memória no disco, o que é diferente no caso de tipos de dados primitivos.

Corda

Uma string é um tipo de dado especial em Java, onde contradiz o fato de que tipos não primitivos são definidos por programadores. O tipo de dados string é um tipo de dados não primitivo, mas é predefinido em java, algumas pessoas também o chamam de nono tipo de dados primitivo especial.

Isso resolve o caso em que um char não pode armazenar vários caracteres, um tipo de dados string é usado para armazenar a sequência de caracteres. Lembre-se de que você precisa colocar a sequência de texto entre aspas duplas.

String s1 = Olá ;

Sistema . fora . println(s1);

O snippet acima imprimirá “Hey There” conforme o esperado.

Arrays, Classes, Interfaces, etc são alguns outros tipos de dados não primitivos em java.

Como calcular o intervalo de tipos de dados?

Depois de observar os intervalos de tipos de dados primitivos, você pode ficar com uma dúvida de que precisamos lembrar disso?. Bem, a resposta seria NÃO. Mas precisamos lembrar o tamanho de cada tipo de dado e então podemos calcular o intervalo desse tipo de dado.

Por exemplo, um tipo de dados byte consome 1 byte de memória no disco. No nível do compilador, todos os dados são armazenados na forma de bits e um byte possui 8 bits. Agora um entre os 8 bits é usado para especificar o sinal do número e os 7 bits restantes podem armazenar o número real, então o número máximo que podemos armazenar usando 7 bits é 128.

Portanto, -128 é o limite inferior do tipo de dados byte e +127 é o limite superior porque zero é o primeiro número na linha numérica após os números negativos.

Da mesma forma, nos tipos de ponto flutuante, os dados são divididos em 3 partes, bit com sinal, mantissa e expoente. A parte de mantissa é usada para armazenar a precisão decimal, um float tem 23 bits de mantissa mais um bit oculto e um double tem 52 bits de mantissa mais um bit oculto.

Para float, log(2^24)/log(10) que é aproximadamente igual a 7, portanto, precisão decimal de 7 dígitos.

Para double, log(2^53)/log(10) que é aproximadamente igual a 15, portanto, precisão decimal de 15 dígitos.

Inscreva-se em cursos de engenharia de software das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Conclusão

Vimos vários tipos de dados em java, entendemos tipos de dados primitivos e não primitivos, a diferença entre primitivos e não primitivos. Percorreu trechos de código de exemplo para ter um conhecimento básico da declaração de tipos de dados.

Entendido como calcular o intervalo de vários tipos de dados de tipos de dados inteiros, como calcular a precisão decimal de tipos de dados de ponto flutuante.

Agora que você conhece vários tipos de dados em Java, comece a explorá-los!

Se você estiver interessado em aprender mais sobre Java, OOPs e desenvolvimento de software full-stack, confira o Programa PG Executivo do upGrad & IIIT-B em Desenvolvimento de Software Full-stack, projetado para profissionais que trabalham e oferece mais de 500 horas de treinamento rigoroso, Mais de 9 projetos e atribuições, status de ex-alunos do IIIT-B, projetos práticos práticos e assistência de trabalho com as principais empresas.

Prepare-se para uma carreira do futuro

Inscreva-se agora para Mestrado em Engenharia de Software