Tipos de dados
Os tipos de dados do Java são de dois tipos
- Tipos de dados primitivos
- Tipos de dados de referência
Os tipos de dados primitivos referem-se a variáveis que não contêm objetos. Contêm valores numéricos, de caractere ou booleanos.
Os tipos de dados de referência referem-se a variáveis que contêm objetos. Como os objetos são construídos a partir de classes, o nome de um tipo de dados de referência é o nome da classe a que se refere o objeto.
Tipos de dados primitivos
O Java possui oito tipos de dados primitivos:
- byte: é um inteiro signed com 8 bits. O seu valor pode variar entre -128 e 127 (inclusive).
Valor de defeito: 0.
- short: é um inteiro signed com 16 bits. O seu valor pode variar entre -32,768 e 32,767 (inclusive).
Valor de defeito: 0.
- int: é um inteiro com 32 bits. O seu valor pode variar entre -2,147,483,648 e 2,147,483,647 (inclusive).
Valor de defeito: 0.
- long: é um inteiro com 64 bits.
O seu valor pode variar entre -9,223,372,036,854,775,808 e 9,223,372,036,854,775,807 (inclusive).
Valor de defeito: 0L.
- float: é um número real (vírgula flutuante ou reais) signed de precisão simples com 64 bits.
Valor de defeito: 0.0f.
- double: é um número real (vírgula flutuante ou reais) signed de dupla precisão com 64 bits.
Valor de defeito: 0.0d
- boolean: tem dois valores possíveis, true ou false. Valor de defeito: false.
- char: representa um caractere Unicode com 16 bits. É usado para armazenar qualquer tipo de caractere.
Valor de defeito: ‘\u0000’.
NOTA: Os valores de defeito são atribuídos às variáveis dos tipos de dados primitivos, quando são declaradas. No entanto, se as variáveis forem locais a um método, a JVM não inicializa a variável com qualquer valor de defeito.
Literais
Um literal é uma representação de um valor fixo. Os literais são representados diretamente no código sem necessitarem de computação. Podemos usar literais para atribuir valores a variáveis.
Exemplo:
boolean result = true;
char capitalC = 'C';
byte b = 100;
short s = 10000;
int i = 100000;
Literais inteiros
Um literal inteiro é do tipo long se termina com a letra L. Caso contrário é do tipo int.
Exemplos:
int num = 78;
long num2 = 234L;
byte num3 = 4;
short num4 = 5;
Literais reais
Um literal de vírgula flutuante (real) é do tipo float se termina com a letra F ou f. Caso
contrário, o seu tipo é double e pode, opcionalmente, terminar com a letra d ou D.
Exemplos:
float num = 78.0F;
double num2 = 234.6;
Literais caratere
Um literal caractere é um caractere entre pelicas ( ‘A’), ou um caractere Unicode (‘\u0108’).
Exemplos:
char lt = ‘d’;
char lt2 = ‘\u0108’;
Conversões entre tipos de dados primitivos
Com exceção do tipo de dados boolean, que não pode ser convertido para outro tipo de
dados, Podemos converter um tipo de dados primitivo para outro.
As conversões entre tipos de dados primitivos são de dois tipos:
- Implícitas
- Explícitas
As conversões implícitas ocorrem quando convertemos um tipo de dados primitivo para outro
com maior capacidade, por exemplo um byte para int ou um float para double. O Java
faz estas conversões de forma automática:
float n1 = 24;
double d1 = n1; //conversão implicita
int n = 78;
float f = n; //conversão implicita
As conversões explícitas ocorrem quando convertemos um tipo de dados primitivo para outro
com menor capacidade, por exemplo um long para int ou um double para float.
O Java não faz estas conversões de forma automática porque podem implicar perda de dados.
Para se poderem fazer, o programador tem de explicitamente as ordenar:
double x = 10.5;
int y = (int) x; //conversão explicita
Tipos de dados de referência
Uma vez que os tipos de dados de referência se referem a classes, podem ser os que o
programador quiser, dependendo das classes que crie.
O valor de defeito de qualquer tipo de dados de referência é null, ou seja, quando
declaramos uma variável de referência, se não lhe atribuirmos um valor inicial, ela fica com o
valor null. Uma variável de referência que tenha o valor null, não está a referenciar
nenhum objecto, o que pode dar a origem a erros.
//Carro é uma classe e um tipo de dados de referência. O Java coloca null na variável carro:
Carro carro;
Existem muitas classes pré-definidas que já fazem parte integrante do Java.
Vamos ver algumas dessas classes.
String
A classe String, é uma classe que faz parte integrante do Java e que permite armazenar e
manipular strings.
Uma variável do tipo String é inicializada com uma string entre aspas.
String str = “ola mundo”;
A variável str tem dentro de si um objecto do tipo String. Uma objecto do tipo String possui
um conjunto de métodos que permitem manipular a string.
Referência da classe String:
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html
Byte
A classe Byte é um invólucro do tipo de dados primitivo byte que nos permite tratar
os valores do tipo byte como um objecto. A classe Byte possui um conjunto de
métodos para manipular os valores byte.
Inicializamos um objecto do tipo Byte passando um valor byte para o construtor:
byte bt = 7;
Byte b = new Byte(bt);
Byte b2 = new Byte(24);
Podemos extrair o valor byte de um objecto Byte através do método
byteValue():
byte bt = 7;
Byte b = new Byte(bt);
byte bt2 = b.byteValue(); //extraimos o valor 7
A classe Byte possui o método estático parseByte(), que permite converter uma
string para byte:
String str = "47";
byte b1 = Byte.parseByte(str);
byte b2 = Byte.parseByte(“86”);
Referência da classe Byte:
http://docs.oracle.com/javase/7/docs/api/java/lang/Byte.html
Short
A classe Short é um invólucro do tipo de dados primitivo short que nos permite
tratar os valores do tipo short como um objecto. A classe Short possui um
conjunto de métodos para manipular os valores short.
Inicializamos um objecto do tipo Short passando um valor short para o construtor:
short st = 7;
Short s = new Short(st);
Short s2 = new Short(24);
Podemos extrair o valor short de um objecto Short através do método
shortValue():
short st = 7;
Short s = new Short(st);
short st2 = s.shortValue(); //extraimos o valor 7
A classe Short possui o método estático parseShort(), que permite converter uma
string para short:
String str = "45";
short b1 = Short.parseShort(str);
short b2 = Short.parseShort("86");
NOTA: o construtor new Short(short) está deprecado desde a versão 9. Deve-se
usar em alternativa o método estático valueOf:Short i = Short.valueOf(5);
Referência da classe Short:
http://docs.oracle.com/javase/7/docs/api/java/lang/Short.html
Integer
A classe Integer é um invólucro do tipo de dados primitivo int que nos permite
tratar os valores do tipo int como um objecto. A classe Integer possui um
conjunto de métodos para manipular os valores int.
Inicializamos um objecto do tipo Integer passando um valor int para o construtor:
int it = 7;
Integer i = new Integer(it);
Integer i2 = new Integer(24);
Podemos extrair o valor int de um objecto Integer através do método
intValue():
int it = 7;
Integer i = new Integer(it);
int it2 = i.intValue(); //extraimos o valor 7
A classe Integer possui o método estático parseInt(), que permite converter
uma string para int:
String str = "45";
int b1 = Integer.parseInt(str);
int b2 = Integer.parseInt("86");
NOTA: o construtor new Integer(int) está deprecado desde a versão 9. Deve-se
usar em alternativa o método estático valueOf:Integer i = Integer.valueOf(5);
Referência da classe Integer:
http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html
Float
A classe Float é um invólucro do tipo de dados primitivo float que nos permite
tratar os valores do tipo float como um objecto. A classe Float possui um
conjunto de métodos para manipular os valores float.
Inicializamos um objecto do tipo Float passando um valor float para o construtor:
float ft = 7.0F;
Float f = new Float(ft);
Float f2 = new Float(24.0F);
Podemos extrair o valor float de um objecto Float através do método
floatValue():
float ft = 7.0F;
Float f = new Float(ft);
float ft2 = f.floatValue(); //extraimos o valor 7
A classe Float possui o método estático parseFloat(), que permite converter
uma string para float:
String str = “45.0F”;
float b1 = Float.parseFloat(str);
float b2 = Float.parseFloat(“86.0F”);
NOTA: o construtor new Float(float) está deprecado desde a versão 9. Deve-se
usar em alternativa o método estático valueOf:Float f = Float.valueOf(5.4F);
Referência da classe Float:
http://docs.oracle.com/javase/7/docs/api/java/lang/Float.html
Double
A classe Double é um invólucro do tipo de dados primitivo double que nos permite
tratar os valores do tipo double como um objecto. A classe Double possui um
conjunto de métodos para manipular os valores double.
Inicializamos um objecto do tipo Double passando um valor double para o
construtor:
double dt = 7.0;
Double d = new Double(dt);
Double d2 = new Double(24.0);
Podemos extrair o valor double de um objecto Double através do método
doubleValue():
double dt = 7.0;
Double d = new Double(dt);
double dt2 = d.doubleValue(); //extraimos o valor 7
A classe Double possui o método estático parseDouble(), que permite converter
uma string para double:
String str = "45.0";
double b1 = Double.parseDouble(str);
double b2 = Double.parseDouble("86.0");
NOTA: o construtor new Double(double) está deprecado desde a versão 9. Deve-se
usar em alternativa o método estático valueOf:Double f = Double.valueOf(5.4);
Referência da classe Double:
http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html
Character
A classe Character é um invólucro do tipo de dados primitivo char que nos
permite tratar os valores do tipo char como um objecto. A classe Character possui
um conjunto de métodos para manipular os valores char.
Inicializamos um objecto do tipo Character passando um valor char para o
construtor:
char ch = ‘T’;
Character c = new Character(ch);
Character c2 = new Character(‘B’);
A classe Character possui vários métodos estáticos bastante úteis para manipular
caracteres, dos quais damos alguns exemplos:
| Método | Descrição |
| isLetter() | Indica se o caractere é uma letra |
| isDigit() | Indica se o caractere é um digito |
| isWhiteSpace() | Indica se o caractere é um espaço em branco |
| isUpperCase() | Indica se o caractere é maiúscula |
| isLowerCase() | Indica se o caractere é minúscula |
| toUpperCase() | Converte o caractere para maiúscula |
| toLowerCase() | Converte o caractere para minúscula |
Exemplo:
char ch = ‘W’;
if(Character.isLetter(ch)){
System.out.println("É uma letra");
}
Podemos extrair o valor char de um objecto Character através do método
charValue():
char ch = ‘T’;
Character c = new Character(ch);
char ch2 = c.charValue(); //extraimos o valor ‘T’
NOTA: o construtor new Character(char) está deprecado desde a versão 9. Deve-
se usar em alternativa o método estático valueOf:Character ch = Character.valueOf(‘K’);
Referência da classe Character:
http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html
Boolean
A classe Boolean é um invólucro do tipo de dados primitivo boolean que nos
permite tratar os valores do tipo boolean como um objecto. A classe Boolean
possui um conjunto de métodos para manipular os valores boolean.
Inicializamos um objecto do tipo Boolean passando um valor boolean para o
construtor:
boolean boo = true;
Boolean b = new Boolean(boo);
Boolean b2 = new Boolean(true);
Podemos extrair o valor boolean de um objecto Boolean através do método
booleanValue():
boolean boo = true;
Boolean b = new Boolean(boo);
boolean boo2 = b.booleanValue(); //extraimos o valor true
A classe Boolean possui o método estático parseBoolean(), que permite
converter uma string para boolean:
String str = "true";
boolean b1 = Boolean.parseBoolean(str);
boolean b2 = Boolean.parseBoolean("true");
NOTA: o construtor new Boolean(boolean) está deprecado desde a versão 9.
Deve-se usar em alternativa o método estático valueOf:Boolean b = Boolean.valueOf(true);
Referência da classe Boolean:
http://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html
