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]
-------------------------------------------------------------------------
|