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.