Problemas com "ponteiros"

12 respostas
J

nao sei se isto é usado em java ou orientação a objetos, mas precisava saber o seguinte:
tenho uma classe A q possui um atributo int.
e essa classe A instancia uma classe B, e passa esse atributo int para a B.
a classe B faz modificações no atributo int.
gostaria q esse atributo sofresse modificacoes na classe A.

Em C eu passaria o endereço do int.

Todas explicações serão bem vindas
muito obrigado pela atenção

12 Respostas

cv1

Em Java, tudo eh passado por copia (“por valor”, dependendo da traducao).

J
pcalcado

Explicando [talvez] melhor:

Como cvex, nosso bot, disse, tudo é passado por cópia em java. VOcê recebe uma cópia do que o objeto passa, mas este comportamento é um pouco diferente dependendo do que você está passando.

Uma referência à um objeto é copiada, logo você tem uma segunda referência para o mesmo objeto [mudando a primeira não afeta a segudna, e vice-versa].

Um tipo primitivo é simplesmente copiado. Ou seja, se o valor era 1, você recebe outro 1. Não há referências para tipos primitivos…

Logo: no way :frowning:

[]s

Bani

Acho que você se confundiu no parênteses… as duas referências apontam para o mesmo objeto, logo mudando a primeira afeta a segunda.
E é justamente assim que se simula a “passagem por referência”. São duas referências diferentes com o mesmo valor, logo apontando para o mesmo endereço de memória.

J

blz, jah tinha suspeitado disso
e seu eu usar o objeto Integer???
poderei modifica-lo???

J

Acho que você se confundiu no parênteses… as duas referências apontam para o mesmo objeto, logo mudando a primeira afeta a segunda.
E é justamente assim que se simula a “passagem por referência”. São duas referências diferentes com o mesmo valor, logo apontando para o mesmo endereço de memória.

interessante, quando eu faço um system.print, no objeto A é diferente do objeto B…
^???

Bani

Se A e B foram duas referências para o mesmo objeto… é o mesmo objeto :wink:

Acho que é mais fácil você dar um exemplo de código do que você está tentando fazer.

pcalcado

Acho que você se confundiu no parênteses… as duas referências apontam para o mesmo objeto, logo mudando a primeira afeta a segunda.
E é justamente assim que se simula a “passagem por referência”. São duas referências diferentes com o mesmo valor, logo apontando para o mesmo endereço de memória.

Exatamente, Bani, mudando a primeira referência não muda a segunda. A referência é o ‘ponteiro’, não o ‘alvo’, logo você pode mudar o lugar para onde ela referencia sem modificar a outra.

Eu entendi o que você quis dizer, eu é que acabei te confundindo com um texto mal-redigido :stuck_out_tongue:

[]s

Bani

“pcalcado”:

Exatamente, Bani, mudando a primeira referência não muda a segunda. A referência é o ‘ponteiro’, não o ‘alvo’, logo você pode mudar o lugar para onde ela referencia sem modificar a outra.

Ah tá, agora entendi também :slight_smile:

Rafael_Steil

“jesus”:
blz, jah tinha suspeitado disso
e seu eu usar o objeto Integer???
poderei modifica-lo???

Nao, porque Integer eh imutavel. Voce vai ter que retornar o valor pelo metodo mesmo.

Rafael

sergiolopes

“Rafael Steil”:

Nao, porque Integer eh imutavel. Voce vai ter que retornar o valor pelo metodo mesmo.
Rafael

ou encapsular esse atributo em uma classe com getter/setter. mas dependendo do caso, eh preferivel devolver o valor mesmo.

J

vou colocar entao o codigo, e gostaria da ajuda de todos.

public class SGBD

{

private DataBase base;

private Pg_database pgData;

private Pg_type pgType;

private GBP bufferP;

private GBD interGBD;

private GED ged;

private int tamanhoBloco;

private int tamanhoBP;
public SGBD(){

interGBD = new GBD();

pgData = new Pg_database();

pgType = new Pg_type();

ged = new GED();

}

}

minha duvida é a seguinte:

essa classe interGBD é uma simples interface que pega o tamanho do bloco e o tamanho do Buffer Pool.

Entao eu gostaria que depois que o usuario entrasse com esses dados, eles fossem vistos pela minha classe SGBD;
Criado 19 de junho de 2004
Ultima resposta 20 de jun. de 2004
Respostas 12
Participantes 6