Re: RES: [java-list] Pergunta for Dummies

2003-05-31 Thread Paulo \"gangrel-br\" RC Siqueira
Caro Leonardo

  Você está parcialmente certo. Quando um método
recebe como parâmetro um objeto, o VALOR desse
parâmetro é uma REFERÊNCIA (é esse ponto que causa a
confusão ...). Isto está bem claro no link que você
mesmo passou. Porém, seu exemplo não é válido, pois é
possível SIM alterar atributos de objetos passados
para métodos.

  O que acontece no seu exemplo é que objetos da
classe String são imutáveis. Então, você tem um
referência a um objeto String no método main, e quando
chama o método "teste(str)" o que acontece é que a
variável local do método recebe uma nova referência a
um objeto String, quando você executa a linha 's =
"Valor 2";' (já que a String recebida não pode ser
alterada por ser IMUTÁVEL).

  No link que você passou há um exemplo com um objeto
não-imutável (quase no fim da página), que mostra a
passagem por valor de um referência funcionando como
deveria ;)

  Conclusão: Acredito que seja correto pensar que a
passagem de objetos para métodos ocorre por valor ou
por referência, dependendo apenas da interpretação de
cada um. O importante é entender que o que os métodos
recebem é uma REFERÊNCIA (ou VALOR do tipo REFERÊNCIA)
e não uma cópia do objeto original.

  Não sei se consegui ser claro, se não consegui me
fale que eu tento explicar melhor ;)


 --- Leonardo Hartleben Reinehr <[EMAIL PROTECTED]>
escreveu: > 
> Olá,
> 
> > Ainda acredito que quando a passagem for de
> objetos será por referência 
> > e não por valor...
> 
> Em Java, parâmetros são sempre passados por valor,
> independente se o parâmetro é um objeto ou um tipo
> primitivo. Faça o teste a seguir que você vai
> comprovar isso:
> 
> public class Teste {
> public static void main(String[] args) {
> String str = "Valor 1";
> teste(str);
> System.out.println(str);
> }
> 
> public static void teste(String s) {
> s = "Valor 2";
> }
> }
> 
> O texto que será impresso é "Valor 1".
> 
> Veja em
>
http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html,
> no item "Pass by Value", que lá explica direitinho o
> que acontece na passagem de parâmetros, e porque os
> casos que você colocou funcionam. Aqui na lista
> mesmo, há algum tempo, essa dúvida apareceu e houve
> bastante debate, dê uma olhada no histórico.
> 
> Um abraço,
> Leonardo
> 
> -- LISTA SOUJAVA
> 
> http://www.soujava.org.br  -  Sociedade de Usuários
> Java da Sucesu-SP
> dúvidas mais comuns:
> http://www.soujava.org.br/faq.htm
> regras da lista:
> http://www.soujava.org.br/regras.htm
> historico:
>
http://www.mail-archive.com/java-list%40soujava.org.br
> para sair da lista: envie email para
> [EMAIL PROTECTED]
>
-
>  

=
_
Paulo "gangrel-br" R C Siqueira
Java Developer and Gamer :)
Mogi das Cruzes - SP - Brazil
Contato: (11) 9424-5474

___
Yahoo! Mail
Mais espaço, mais segurança e gratuito: caixa postal de 6MB, antivírus, proteção 
contra spam.
http://br.mail.yahoo.com/

-- LISTA SOUJAVA  
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP 
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED] 
-



Re: RES: [java-list] Pergunta for Dummies

2003-06-04 Thread Marcio Silva
Ólá,
  acho que qdo se fala a respeito de Java existe uma pequena divergencia 
.

  Digo isto pois fiz quando o curso na Sun e tive esta mesma duvida 
(duvida normal de quem ja desenvolveu em C#)..

  O que é dito em Java que tudo é passado por valor (by Value), significa 
que estamos passando sempre o valor de uma stack

  Qdo criamos instanciamos uma class ( Class v1 = new Class()), estamos 
alocando um espaço em memória e mais um pedacinho na chamada stack (local 
onde temos a variavel e o end. de memoria onde o objeto sera armazenado)

  Qdo criamos um tipo primitivo, o mesmo ficara somente na stack, ou seja, 
a variavel e seu valor serão alocados

  Logo quando dizemos que tudo é pass by value é por que estamos passando o 
valor da stack, ou seja, se  passamos um tipo primitivo, estaremos passando 
(By Value) o próprio valor e este não sofrerá alteração. mas qdo 
passamos um objeto por referencia estaremos passando ainda By Value, mas 
desta vez, não estaremos passando o conteudo do objeto e sim o valor da 
referencia deste objeto, ou seja, o endereco de memória onde o objeto esta 
localizado o que significa que as modificacoes refletirao no objeto 
passado (seria o equivalente a passar um parametro como ^p1, ou seja por 
referencia)

  Não sei se ficou confuso mas foi a forma que achei para tentar 
explicar

[ ]s



From: "Leonardo Hartleben Reinehr" <[EMAIL PROTECTED]>
Reply-To: [EMAIL PROTECTED]
To: <[EMAIL PROTECTED]>
Subject: RES: [java-list] Pergunta for Dummies
Date: Wed, 21 May 2003 16:13:19 -0300
Olá,

> Ainda acredito que quando a passagem for de objetos será por referência
> e não por valor...
Em Java, parâmetros são sempre passados por valor, independente se o 
parâmetro é um objeto ou um tipo primitivo. Faça o teste a seguir que você 
vai comprovar isso:

public class Teste {
public static void main(String[] args) {
String str = "Valor 1";
teste(str);
System.out.println(str);
}
public static void teste(String s) {
s = "Valor 2";
}
}
O texto que será impresso é "Valor 1".

Veja em http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html, 
no item "Pass by Value", que lá explica direitinho o que acontece na 
passagem de parâmetros, e porque os casos que você colocou funcionam. Aqui 
na lista mesmo, há algum tempo, essa dúvida apareceu e houve bastante 
debate, dê uma olhada no histórico.

Um abraço,
Leonardo
-- LISTA SOUJAVA 
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED]
-
_
MSN Hotmail, o maior webmail do Brasil.  http://www.hotmail.com
-- LISTA SOUJAVA  
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP 
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED] 
-