Para quem tem lido os meus topicos ja deve ter reparado que gosto de ir aos mais pequenos pormonores do java… vejam o seguinte:
1ª classe:
publicclassWhatever{publicstaticintx=5;}
2ºª classe
publicclassTeste{privateintx=Whatever.x;}
Agora… a minha questão é… quando crio o x na classe teste estou apenas a criar mais uma referencia para a mesma varivel certo? não vão ficar duas varias x na memoria pois nao ? Eu acho que nao mas gostaria que voces, mais experientes que eu, podessem confirmar.
Bom Morcego eu entendo a seguinte forma, na classe1 vc tem uma variavel int com seu espaço alocado em memoria, certo.
Na sua classe 2 vc esta fazendo uma referencia do int a classe 2 para a classe1. Porem não existe nenhuma area alocada para a variavel a classe 2 mas sim um referencia para a classe1.
Ele claro que vc tem um area que diz que a variavel da classe2 existe mas vc não tem uma area em memoria reservada para ela, so existem uma referencia.
Não sei se fui bem claro ?
[]´s
duardor
Seguinte
Pelo q eu estudei o espaco da variavel static existe desde quando a classe foi carregada e a variavel da classe que nao eh static tem um espaco de memori para cada instancia da classe. No caso da estatica existe um espaco de memoria para todas as instancias da classe…
Abraços
Bani
Na minha opinião, são duas variáveis diferentes com dois espaços de memória diferentes.
Isto por ser um tipo primitivo e não um objeto Integer.
Mas sei lá, estou chutando…
Paulo_Silveira
A Bani tem TODA a razao. Isso ai sao duas variaveis que possuem valores, e nao enderecos ou referencias.
Entao existem dois “cincos” na memoria.
Daniel_Quirino_Olive
Primitivo em Java é igual a primitivo em qq outra linguagem, ou seja, uma vez criada uma variável de um tipo primitivo, vai haver alocação de memória referente ao tamanho do tipo primitivo (no caso do int, 4 bytes). Assim, ponto para a Vanessa e para o Paulo.
that’s all folks…
Bruno_Cardoso
Ok, entao aqui vai uma pergunta… se sao duas variaveis diferentes, e se sao criados espacos na memoria para cada um, o que acontece se eu modificar o valor de X na classe Whatever? como vai o programa saber que tem q mudar o X do Teste tambem ? fazia mto mais sentido haver apenas um objecto na memoria…
PEACE!
duardor
O programa nao vai saber…
Por isso sao duas variavis diferentes…
Se vc quer realemente fazer isso vai ter q rever seu design…
E complementando a galera
Um primitivo static tem apenas uma posicao de memoria pra ele… corrto???
Abraços
Bruno_Cardoso
Ok, parece que sao variaveis diferentes mesmo... acabei de fazer o codigo que o prova:
public class Whatever {
public static int x = 5;
}
Para ficar mais claro, quando você fala que “x = y”, você não está dizendo que “x é igual a y”, e sim mandando copiar o valor de y na variável x.
No caso de primitivos, ele copia o valor e “esquece” qualquer referência.
No caso de objetos, ele copia o endereço de memória em que está o objeto (afinal, é uma variável de referência), e aí você fica com duas variáveis apontando para o mesmo objeto na memória. Por ser o mesmo objeto, neste caso se você mudar alguma coisa nele irá refletir em ambas variáveis. Mas se você fizer uma dessas variáveis apontar para outro objeto, não vai influenciar na outra, pois ela continuará guardando o endereço do objeto antigo.
E respondendo ao duardor, sim, por ser uma variável static ela existe só uma vez para qualquer objeto da classe.
M
Munchen
esse naum é um daqueles casos em que qndo existe duas variaveis iguais, o java irá ocultar uma delas.
Ex: uma variavel de instancia x e uma variavel local x num metodo soma(). Enquanto eu estiver no metodo soma() a variavel de instancia x será ocultada, sendo so acessivel com a palavra “this”.