[ת]Does Java pass by reference or pass by value?
http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html
Does Java pass by reference or pass by value?
Why can't you swap in Java?
By Tony
Sintes, JavaWorld.com, 05/26/00
Print
Email
Feedback
Resources
Discuss
(76)
Digg
Reddit
SlashDot
Stumble
del.icio.us
Technorati
dzone
If Java uses the pass-by reference, why
won't a swap function work?
Your question demonstrates a common error made by
Java language newcomers. Indeed, even seasoned veterans find it
difficult
to keep the terms straight.
Java does manipulate objects by reference, and
all object variables are references. However, Java doesn't pass method
arguments
by reference; it passes them by value.
Take the badSwap()
method for
example:
public void badSwap(int var1, int var2)
{
int temp = var1;
var1 = var2;
var2 = temp;
}
When badSwap()
returns, the
variables passed as arguments will still hold their original values. The
method will also fail if we change
the arguments type from int
to Object
,
since Java passes object references by value as well. Now, here is
where it gets tricky:
public void tricky(Point arg1, Point arg2)
{
arg1.x = 100;
arg1.y = 100;
Point temp = arg1;
arg1 = arg2;
arg2 = temp;
}
public static void main(String [] args)
{
Point pnt1 = new Point(0,0);
Point pnt2 = new Point(0,0);
System.out.println("X: " + pnt1.x + " Y: " +pnt1.y);
System.out.println("X: " + pnt2.x + " Y: " +pnt2.y);
System.out.println(" ");
tricky(pnt1,pnt2);
System.out.println("X: " + pnt1.x + " Y:" + pnt1.y);
System.out.println("X: " + pnt2.x + " Y: " +pnt2.y);
}
If we execute this main()
method,
we see the following ou
Ïà¹ØÎĵµ£º
0£®ÒýÑÔ
ÔÚChinaITLABµ¼Ê¦ÖƸ¨µ¼ÖУ¬±ÊÕß·¢ÏÖÎʵÃ×î¶àµÄÎÊÌâιýÓÚ"ÈçºÎѧϰ±à³Ì£¿JAVA¸ÃÈçºÎѧϰ£¿"¡£ÀàËÆµÄÎÊÌâ»Ø´ð¶àÁË£¬ÄÑÃâ»á¸Ð¾õÑá·³£¬¾ÍÃÈÉúÁËдϱ¾ÎĵÄÏë·¨¡£µ½Ê±ºòÔÙÓÐÈËÎÊÆðÀàËÆµÄÎÊÌ⣬ÎÒ¿ÉÒÔ¸æËßËû£¨Ëý£©£¬ÇëÄãÈ¥¿´¿´¡¶JAVAѧϰ֮·¡·¡£°Ý¶Á¹ý̨Íå²ÌѧïÞÏÈÉúµÄ¡¶JAVAҹδÃß¡·£¬ÓÐЩÎÄÕÂÈç¡¶JAVAѧϰ֮µÀ¡·µÈÈ ......
×î½ü¾³£ºÍ¹«Ë¾×öJAVAµÄÐÖµÜÃÇ´ò½»µÀ£¬ÓÉÓÚÐèҪͳ¼ÓÃÜËã·¨£¬ËùÒÔÒªÇó×öÒ»¸ö¼ÓÃܵÄDLLÎļþ¹©ÐÖµÜÃǵ÷Ó㬸ù¾ÝÍøÉϸ÷λ´óϺÃǵľÑ飬ÔÚ¼ÓÉϸöÈËÔÚÃþË÷¹ý³ÌÖеÄÌå»á£¬ÏÖÔÚ½«Á÷³ÌÒÔ¼°¸öÈËÐĵÃÌùÉÏ£¬ÒÔ¹©ÒÔºóÂþÂþ³ÌÐòÉúÑIJο¼£¬ÈçÓв»¶ÔµÄ»¹Çë¸÷λ´óÁ¦Ö¸Õý¡£
µÚÒ»²½ÊDZàдjavaÀ࣬ ......
JavaʹµÃ¸´ÔÓÓ¦ÓõĿª·¢±äµÃÏà¶Ô¼òµ¥£¬ºÁÎÞÒÉÎÊ£¬ËüµÄÕâÖÖÒ×ÓÃÐÔ¶ÔJavaµÄ´ó·¶Î§Á÷Ðй¦²»¿Éû¡£È»¶ø£¬ÕâÖÖÒ×ÓÃÐÔʵ¼ÊÉÏÊÇÒ»°ÑË«Èн£¡£Ò»¸öÉè¼ÆÁ¼ºÃµÄJava³ÌÐò£¬ÐÔÄܱíÏÖÍùÍù²»ÈçÒ»¸öͬÑùÉè¼ÆÁ¼ºÃµÄC++³ÌÐò¡£ÔÚJava³ÌÐòÖУ¬ÐÔÄÜÎÊÌâµÄ´ó²¿·ÖÔÒò²¢²»ÔÚÓÚJavaÓïÑÔ£¬¶øÊÇÔÚÓÚ³ÌÐò±¾Éí¡£Ñø³ÉºÃµÄ´úÂë±àдϰ¹ß·Ç³£ÖØÒª£¬±ÈÈçÕýÈ·µ ......
Ñ¡ÔñµÄ·¶Î§Ì«¹ã£¬¿ÉÒÔ¶ÁµÄÊéÌ«¶à£¬ÍùÍùÈÝÒ×ÎÞËùÊÊ´Ó¡£ÎÒÏë¾ÍÎÒ×Ô¼º¶Á¹ýµÄ¼¼ÊõÊé¼®ÖÐÌôÑ¡³öÀ´Ò»Ð©£¬°´ÕÕѧϰµÄÏȺó˳Ðò£¬ÍƼö¸ø´ó¼Ò£¬ÌرðÊÇÄÇЩÏë²»¶ÏÌá¸ß×Ô¼º¼¼ÊõˮƽµÄJava³ÌÐòÔ±ÃÇ¡£
Ò»¡¢Java±à³ÌÈëÃÅÀà
¶ÔÓÚûÓÐJava±à³Ì¾ÑéµÄ³ÌÐòÔ±ÒªÈëÃÅ£¬Ëæ±ã¶ÁʲôÈëÃÅÊé¼®¶¼Ò»Ñù£¬Õâ¸ö½×¶ÎÐèÒªÄã¿ìËÙµÄÕÆÎÕJava»ù´¡Óï·¨ºÍ»ù±¾Óà ......