|
A passagem � sempre por valor. Por par�metro
somente quando vc passa um objeto. Uma String � tratada como
um objeto em Java. Pelo menos � o que
diz
livro Java The Complete Reference de Herbert
Schildt.
Daniel
----- Original Message -----
Sent: Wednesday, May 28, 2003 8:54
AM
Subject: Re: [java-list] Pergunta for
Dummies
Discordo, a passagem de par�metros em Java � SEMPRE
por valor, veja abaixo, um trecho traduzido da p�gina 19 do livro Complete
Java 2 Certification Study Guide (3� edi��o) que explica esta confus�o de
conceitos.
public void metodo1()
{ Label lbl = new
Label(); lbl.setText("testo
1");
metodo2(lbl);
System.out.println(lbl.getText());
}
public void metodo2(Label arg)
{ arg.setText("texto
2"); }
No exemplo acima � criado um objeto da
classe Label com uma refer�ncia chamada lbl. Esta refer�ncia � passada como
par�metro, o que significa que uma c�pia dela � passada para o m�todo2.
Agora temos 2 refer�ncias apontando para o mesmo objeto, o que significa
que ambas as chamadas setText ir�o modificar o mesmo objeto. � importante
notar que a c�pia aqui � entre as refer�ncias e n�o entre objetos. Mais uma
vez a passagem de argumentos � por valor mas o valor neste caso n�o � uma
grandeza num�rica mas um endere�o.
Paulo
Paro.
Fabio Eduardo Thomaz
<[EMAIL PROTECTED]> on 21/05/2003 16:57:24
Please respond to
[EMAIL PROTECTED]
To:
[EMAIL PROTECTED] cc: (bcc: Paulo Roberto
Paro/Stefanini)
Subject: Re: [java-list] Pergunta for
Dummies
um exemplo simples de que a passagem de parametros n�o
� sempre por valor � a passagem de um array... o que se passa � uma
refer�ncia...
Ex.:
//-----------------------------------------------------
public
class Teste { public static void setArray ( double dArray[]
) { dArray[0] =
10; dArray[1] = 20; } public
static void main ( String[] args ) {
double dArrayOriginal[] = {0,0};
System.out.println ( "Array antes da passagem de par�metro:"
); System.out.println ( dArrayOriginal[0] + " | "
+ dArrayOriginal[1] ); setArray ( dArrayOriginal
); System.out.println ( "Array depois da passagem
de par�metro:" ); System.out.println (
dArrayOriginal[0] + " | " + dArrayOriginal[1] );
} }
//-----------------------------------------------------
[]'s Fabio
Eduardo Thomaz
Rodrigo escreveu:
>Bem, at� onde sei a
Classe String n�o pode ser alterada, logo quando vc >fizer o += ele ir�
instanciar uma nova String, logo a refer�ncia n�o ser� >mais a mesma. O
exemplo que me deste n�o mudou minha opini�o... Ainda >acredito que
quando a passagem for de objetos ser� por refer�ncia e n�o por >valor...
Se criar uma classe e pass�-la como parametro e dentro deste >m�todo, eu
alterar algum valor da mesma isso refletir� no meu objeto...
Veja >exemplo: > >public class Teste01 { >
private int numero; > public Teste01(int i) { >
setNumero( i ); > } > > public void setNumero(
int i ) { > numero = i; >
} > > public int getNumero() { > return
numero; > } >} > >public class Teste
{ > > public static void main(String[] args) { >
Teste01 t = new Teste01(10); > xxx( t ); >
System.out.println( t.getNumero() ); > } > > private static
void xxx( Teste01 i ) { > i.setNumero( 15 ); >
} >} > >Veja, passei um objeto como par�metro e ao setar o
valor modificou o estado >do meu objeto... >Quanto ao que voc�
disse de o append estar alterando uma propriedade interna >da classe...
Bem, meus objetos s�o feitos de propriedades e m�todos, e se eu >criasse
dois objetos StringBuffer diferentes e passase um deles como >par�metro
alteraria apenas daquele objeto... Logo,
refer�ncia... > > > >----- Original Message
----- >From: "Alexandro Strack"
<[EMAIL PROTECTED]> >To:
<[EMAIL PROTECTED]> >Sent: Wednesday, May 14, 2003 6:57
PM >Subject: Re: [java-list] Pergunta for
Dummies > > >Oi Rodrigo, > > N�o
concordo com voc�. O que acontece na verdade � que a
classe >StringBuffer � mut�vel (diferente de String que � n�o mut�vel) e
logo o que >se passa � que o m�todo append est� alterando o valor de
uma >propriedade(vari�vel) interna da classe StringBuffer. Essa
propriedade >armazena o valor. Para voc� ter a certeza do que estou
falando mude de >StringBuffer para String e substitua o append por += .
Voc� ver� que >imprimir� JAVA. > > Para ir
mais al�m mude todo o seu exemplo para trabalhar n�o com
um >StringBuffer mas com um Integer. Ver� que tamb�m n�o funcionar� pois
a >classe Integer � n�o mut�vel. > > Em
resumo: a passagem de par�metro � sempre por valor. > >Um
abra�o, > >Alexandro Strack >----- Original Message
----- >From: "Rodrigo" <[EMAIL PROTECTED]> >To:
<[EMAIL PROTECTED]> >Sent: Saturday, May 10, 2003 7:16
PM >Subject: Re: [java-list] Pergunta for
Dummies > > > > >>hehehe, o exemplo n�o foi,
agora sim: >> >>--- >>public class Teste
{ >> >> public static void main(String[] args)
{ >> StringBuffer s = new StringBuffer( " Java"
); >> teste( s ); >> System.out.println( s
); >> } >> public static void teste( StringBuffer s )
{ >> s.append( " � bala" ); >>
} >>} >>---- >>A sa�da ser� "Java � bala" o q no
meu ver significa que a passagem foi por >>refer�ncia j� que alterei
o meu objeto que passei por
par�metro... >> >>Fallow >>----- Original Message
----- >>From: "Rodrigo" <[EMAIL PROTECTED]> >>To:
<[EMAIL PROTECTED]> >>Sent: Saturday, May 10, 2003 7:14
PM >>Subject: Re: [java-list] Pergunta for
Dummies >> >> >> >> >>>Eu sou
suspeito a falar, mas pelo que sei toda a passagem de objetos
em >>> >>> >>java >> >> >>>�
por refer�ncia, j� as passagens de tipos b�sicos ser�o sempre
por >>> >>> >>valor... >> >> >>>Desculpe-me
se estiver errado... >>> >>>Segue um
exemplo: >>> >>>----- Original Message
----- >>>From: "Jos� Voss Junior"
<[EMAIL PROTECTED]> >>>To:
<[EMAIL PROTECTED]> >>>Sent: Wednesday, May 07, 2003
9:21 PM >>>Subject: Re: [java-list] Pergunta for
Dummies >>> >>> >>>Corre��o, Passagem de
Parametro em Java � somente por Valor!!!!! >>>----- Original
Message ----- >>>From: Ricardo Jun Taniguchi
<[EMAIL PROTECTED]> >>>To:
<[EMAIL PROTECTED]> >>>Sent: Friday, May 02, 2003
5:36 PM >>>Subject: RE: [java-list] Pergunta for
Dummies >>> >>> >>>Lembrando-se de que os
par�metros s�o passados por refer�ncia em
Java, >>> >>> >>temos >> >> >>>que: >>> >>>new
Boolean(true) � esquerda = objeto A instanciado com o
par�metro >>> >>> >true; > > >>>new
Boolean(true) � direita = objeto B instanciado com o par�metro
true; >>> >>>Como a compara��o == � feita por meio da
verifica��o dos endere�os dos >>>objetos e n�o pelo seu conteudo,
naturalmente essa compara��o
daria >>> >>> >false. > > >>>Agora,
se quiser que seja true, temos que fazer: >>> >>>if
(new Boolean(true).equals(new
Boolean(true))) >>> >>> >>>-----Original
Message----- >>>From: Nelson
[mailto:[EMAIL PROTECTED] >>>Sent: Tue 29-Apr-03
16:35 >>>To: SouJava >>>Cc: >>>Subject:
[java-list] Pergunta for Dummies >>>Algu�m pode me dizer, porque o
c�digo abaixo, imprime "false" ? >>> >>>class teste
{ >>> >>>public static void main(String[] args)
{ >>> >>>if (new Boolean(true) == new Boolean(true))
{ >>> System.out.println("true"); >>> }
else { >>>
System.out.println("false"); >>> } >>>
} >>>} >>> >>> >>> >>> >>> >>> >>> >>-------------------------------------------------------------------------- >>-- >> >> >>>---- >>> >>> >>>------------------------------
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] > > >>------------------------------------------------------------------------- >> >> >>>------------------------------
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] > > >>------------------------------------------------------------------------- >> >> >>> >>> >>------------------------------
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] >>------------------------------------------------------------------------- >> >> >> >> > >------------------------------
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] >------------------------------------------------------------------------- > > > >------------------------------
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] >------------------------------------------------------------------------- > > >
------------------------------ 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]
-------------------------------------------------------------------------
|