Conceito e exemplos de passagem por valor e referência?

13 respostas Resolvido
programaçãojava
I

Bom dia pessoal, estou precisando fazer um trabalho para a faculdade em LP1, mas estou encontrando dificuldade. Preciso do conceito e exemplos de passagem por valor e referência (já li em vários lugares que não existe no java e em outros que existe. To confuso :confused: ) e seu uso como static ou não. Podem me ajudar por gentileza? (urgente :sweat: )

13 Respostas

M

Cara esse assunto é nebuloso mesmo, aconselho dar uma olhada neste tópico aqui no fórum:

Acredito que a maior confusão sobre o assunto é que as pessoas confundem referência no Java com a referência do C/C++, o que é diferente já que no Java não lidamos diretamente com ponteiros e referências.

De uma olhada no link que passei, lá já tem várias opiniões interessantes sobre o assunto.

D

Links:

http://homepages.dcc.ufmg.br/~olmo/aula8-parametros.pdf

I

Obrigado amigo!

I

Valeu amigo!

I

Ok, mas porque e quando devo usar static ou não na passagem de parâmetros?

D

Coloque exemplos dessa static!

Basicamente, o static é usado quando não se quer em um classe por exemplo que seja feita uma instância.

I

Hum…valeu…clareou um pouco a ideia…:joy:

D
Solucao aceita

Java só permite passagem por valor. Qualquer outra coisa que digam é mito. Aqui tem mais detalhes.

O uso do static deve ser feito sempre e somente quando for necessário compartilhar algo entre todas as instâncias de objetos que uma determinada classe puder gerar. Logo, este recurso (atributo ou método) será o mesmo para cada objeto.

Considere o seguinte, uma classe chamada Foo que cria objetos foo. Todos estes objetos receberão um identificador ao serem criados. Este identificador nunca pode ser repetido ou ser duplicado. Logo, é preciso ter um controle centralizado destes identificadores.

Se eu fizesse isso:

public class Foo {
    int identificador;
}

Cada objeto poderia dar o valor que quisesse ao atributo identificador (independente de ser public, default, private ou protected).
Agora, quando eu faço:

public class Foo {
    static int identificador;
}

Eu digo ao compilador/JVM que aquele atributo sempre terá o mesmo valor para todos os objetos, pois ele pertence à classe.

I

Obrigado amigo pelas dicas e pela resposta!!

A

Uma pergunta, quando em um método, você passa um Objeto como argumento, essa passagem não seria por referência não? Visto que uma alteração no Objeto dentro do método alteraria o valor dele original.

D

Se você seguiu a orientação da resposta e acessou o link, foi redirecionado a uma thread do stackoverflow onde uma das respostas é bem clara: apenas passagem por valor. A mesma resposta complementa que "infelizmente decidiram chamar a posição de memória em que um objeto se encontra de “referência” e isso acaba causando toda a confusão.
Você está passando o valor do objeto, não sua referência. Você não tem algo como no C (ou C++), onde você poderia fazer algo como

int x = 10;
outraFuncao(&x);//está passando a referência da variável x, ou seja, sua posição de memória

//e na outraFuncao
int w = *x;//aqui está obtendo o valor existente na referência passada, ou seja, na posição de memória que armazena a variável x

Java não possui nada dessa natureza, pois, sua fundamentação foi estrutura para:
1 - Ser simples
2 - Manter a manipulação de baixo nível protegida

Além disso, uma referência de objeto no java é diferente de uma referência do C. A referência, no java, está relacionada a uma instância de um objeto específico, enquanto que, no C, pode ser entendida como a localização onde determinada variável está.
Compreendido?

A

sim,muito obrigado

S

Em Java os tipos primitivos são passados por valor e os tipos não primitivos são passados por cópia de referência.
Dessa forma você consegue alterar os membros da referência, mas não consegue alterar a referência em si, como é possível no C++ por exemplo.

Criado 13 de março de 2017
Ultima resposta 12 de dez. de 2017
Respostas 13
Participantes 7