Váriaveis primitivas e variáveis de referência

Bom pessoal, estou com uma dúvida, tenho a resposta mais não sei se é a resposta correta. Ela faz questão a diferença entre as variáveis. Bom vamos lá. Eu acredito que as variáveis primitivas são aquelas para guardar algum valor para ser utilizado como por exemplo:

int nota; ou int x = 10;

E varíaveis de referência são as variáveis para chamar uma classe como por exemplo:

Scanner ler = new Scanner(System.in);

Bom pessoal, será que estou certo, ou errado, ou falta alguma coisa…

Agradeço desde já.

Tipos Primitivos: byte, short, int, long, char, float, double e boolean.
Tipos Referência: qualquer outro tipo.

[]'s

[quote=davidbuzatto]Tipos Primitivos: byte, short, int, long, char, float, double e boolean.
Tipos Referência: qualquer outro tipo.

[]'s[/quote]

Bom, sim mais está ideía que estou tendo das variáveis estão certas::

Bom dia LuizRomero, qualquer linguagem de programação possuei um conjunto de variaveis para armazenamento temporario de valores, sendo eles, int, short, long, float, double, char, boolean etc… o Java como qualquer outra linguagem também possui essas variaveis primitivas, mais também possui variaveis de referência, que na verdade é um conjunto de classes que podem ser usadas, ou seja instanciadas, essas classes possuem seus atributos (“locais de armazenamento de informações”) e seus comportamentos (“métodos que processam essas informações”)

Exemplo:


String nome = new String(); // nesse momento uma instancia (Objeto) da classe String foi criada em memoria. 
nome = "LuizRomero"; // foi atribuido um valor para ela

nome = nome.substring(0, 3); // método da classe String sendo usado (comportamento). esse método só pode ser usado pois foi criado um objeto concreto da classe String e esse método está sendo acessado pelo endereço de memoria que está referenciando o mesmo.

a diferença entre variaveis primitivas e variaveis de tipo de referencia é que as primitivas não possuem comportamento, quando se chama um método passando uma varivael primitiva, na verdade uma cópia da mesma é passada por paramentro, diferente das variaveis de referencia, onde o endereço de memoria para acessar a mesma é passada, sendo assim qualquer alteração em uma variavel de referencia feita dentro de um método modificará o objeto mesmo ele estando em um outro lugar. pois o que seria passado como parametro é o endereço de mémoria que esta sendo usado para referenciar o mesmo.

espero ter ajudado.

[DUVIDA CHUCK NORRIS]

se eu quizer criar uma classe parecida com a integer…

que funcione dessa maneira: InteiroExt inteiro_por_extenso = 20;

por enquanto quero que ela funcione igual a classe Integer…

como poderia ser feito…tentei dessa forma mais ainda não funciona, falta alguma coisa…:

[code]public final class InteiroExt extends java.lang.Number{

private static final long serialVersionUID = 1L;

private final int valor;

public InteiroExt(int valor){
	
	this.valor = valor;
}

@Override
public double doubleValue() {
	// TODO Auto-generated method stub
	return 0;
}

@Override
public float floatValue() {
	// TODO Auto-generated method stub
	return 0;
}

@Override
public int intValue() {
	// TODO Auto-generated method stub
	return 0;
}

@Override
public long longValue() {
	// TODO Auto-generated method stub
	return 0;
}

}[/code]

na principal:

[code]public class Principal {

public static void main(String args[]){
	
	InteiroExt numero = 10; //erro que não da para converter int para InteiroExt...
}

}[/code]

Douglas, isso provavelmente não é possível.
O Autobox/Autounbox é gerado pelo compilador se não me engano e não por características da classe (estender Number por exemplo).

[]'s

Variáveis Locais = Stack
Variáveis de Instância = Heap

Ou seja cada tipo reside em locais diferentes,variáveis locais são mais rapidas em
ocasiões especifícas.

então:

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Integer.java#Integer

aqui o código foi feito em java, onde eu encontro esse código para alterá-lo no meu java, ou se for no compilador, onde eu encontro o codigo fonte do compilador pra alterar na raiz?


EDIT

ahh acho que entendi… a JDK não é opensource…eu só iria fazer funcionar compilando a OpenJDK pois a JDK original nao tem fonte…

é isso ?


EDIT

é por isso que eu digo, empresas grandes “NÃO SÃO OPENSOURCE” fingem…

LuizRomero, vc não está errado nos exemplos que citou. Mas tentando explicar um pouco melhor e aproveitando tudo o que os colegas disseram também, seria mais ou menos isso:

Variáveis primitivas: byte, short, int, long, char, float, double e boolean.
exemplo:

int i = 1; // i é do tipo int(primitivo), poderia ser qualquer um dos tipos acima, fica na pilha;

Exemplos de variáveis de referência:

Integer i2 = 2; // i é uma variável de referência(wrapper) da classe Integer, fica no heap; i = i2; // a partir do java 5 o recurso do Boxing ou Unboxing é feito automaticamente pelo compilador; public void teste(minhaClasse i4){} // i4 é uma variável de referência à classe minhaClasse; int [] i3; // i3 é uma variável de referência ao objeto array de tipos primitivos int;
Variáveis de referência sempre são do tipo da classe ou interface.
Procure num bom livro que vc vai entender melhor. Há muita explicação para que vc entenda bem as diferenças.

Abs!