Diferenças entre primitivos e de Instância: Memória stack e Heap

Propaganda
Tipo de Instância ou referencia: Uma classe define um tipo de dado. Ela não pode ser usada
a não ser que seja instanciada. Uma instância é um objeto do tipo definido pela classe.
Qualquer classe pode ser instanciada como qualquer outro tipo da linguagem Java.
Quando declarada uma variável de um tipo de referência, está se especificando que a variável
irá referenciar, ou apontar, para um objeto em vez de gravar um simples valor no caso de um
primitivo.
Diferenças entre primitivos e de Instância:
A diferença mais evidente está na necessidade de reservar memória para o objeto através do
uso do operador “new”. Por outro lado, a declaração de um tipo primitivo já indica para a jvm
reservar memória para o mesmo. O operador “new” realiza uma série de tarefas:
-Reserva espaço na memória suficiente construtor;
-Realiza a chamada do método construtor;
-Retorna uma referência (ou instância) para o novo objetivo criado;
Memória stack e Heap:
A memória da aplicação está dividida em duas partes stack e heap.
A memória stack (pilha) é um bloco de memória que é incrementado toda vez que um método
e chamado e esvaziado quando o método é finalizado.
A memória heap é um pool de memória de propósito geral, onde todos os objetivos Java
ficam. As variáveis instância armazenam na memória stack um referência de um objeto que
está na memória heap.
Cast entre tipos primitivos:
È possível atribuir o conteúdo de uma variável a outro, porem se a variável de origem for de
um tipo diferente da variável de destino, o dado pode ter de passar por um processo de
convensão antes de ser armazenado.
Vejamos os tipos primitivos, observando o tamanho de cada um.
6
Byte
5
Stack
4
Int
3
Long
2
Float
1
Double
0
Pela figura podemos observar que uma variável do tipo “cabe” dentro de uma variável do tipo
int, e que uma do tipo long, “cabe” dentro de uma do tipo “float”. Porém uma variável do tipo
Double não “cabe” dentro de uma do tipo “stack”.
Quando um tipo “cabe” dentro do outro, independente do valor armazenado, dizemos que a
conversão (cast) de tipos é automática.
Quando um tipo não “cabe” dentro do outro, porém o valor armazenado na variável “cabe”
temos que fazer a conversão (cast) de forma explícita.
Ex: public class ConversaoTipos{
Public static void main(String args[]){
Byte mbyte=10;
Stack mshort=20;
Int mint=30;
Long mbng=40;]
Float mfloat=50.0f;
Double mdouble=60.0;
//cast automático: byte para int
Int 0=mbyte;
//cast explícito double para long
Long h=(long)mdouble;
//cast automatico: float para double
Double c= mFloat;
//cast explicito: long para short
Short d=(short)mbng;
}
}
Classes Wrapper :
Uma variável constante ou atributo cujo tipo seja primitivo, somente é cpaz de armazenar um
único dado. Além disto, não dispõem de qualquer método. No entanto, existe uma classe
wrapper (invólucro) para cada um dos tipos primitivos.
Tipo Primitivo
Boolean
Char
Byte
Short
Int
Long
Float
Double
Classe Wrapper
Java.lang.Boolean
Java.lang.character
Java.lang.byte
Java.lang.short
Java.lang.integer
Java.lang.long
Java.lang.float
Java.lang.double
Cada uma delas serve para representar dados de um dos tipos primitivos na forma de objetos.
A grande vantagem é que essas classes possuem métodos para realizar a conversão do tipo
primitivo que ela representa em texto e vice-versa e oferecem constantes e métodos úteis a
manipulação desse dado.
Métodos para conversão:
Todas as classes wrapper possuem um construtor que recebe como parâmetro um valor do
tipo primitivo correspondente.
Ex:
Integer in = new Integer(10);
Character = new Character (‘A’);
Todas as classes wrappers , com exceção de character, recebem parâmetros uma string.
Float f1= new Float(“1034.566”);
Boolean bo= new Boolean (“false”);
Todas classes wrapper, com exceção de character e Boolean, possuem um método “pause”
que recebe uma string e retorna um tipo primitivo.
Short sh= Short.parseShort(“1034”);
Double d= Double,parseDouble(“1276.62”);
Todas as classes wrapper numérica (Byte, Short, Integer, Long, Float e Double) derivam de uma
classe chamada Number, e devido a isto sobrescrevem seus seis métodos (bytevalue(),
shortvalue(),intvalue(), longvalue(),floatvalue() e Doublevalue()).
Ex:
Public calss ExemploConversao{
Public static void mian(String args[]){
Double d= New Double (120);
Byte b= d.byteValue():
Short s=d.short.Value();
Int i=d.int.Value();
Long l=d.long.Value();
Float f=d.float.Value();
}
}
Download