Nathan,
While I believe
David’s portrayal of me as a quibbling zealot is a bit harsh, he is right about
one thing “(you)
got the official terminology wrong”, but you were right
about how it worked.
Java’s argument passing is pass-by-value since in all cases
the method receives a copy of the original (the definition of pass-by-value).
When the argument is an object, the method is passed a copy of the original.
Granted, it is a shallow copy (in fact, the shallowest of copies since only the
reference to the object is copied), but it’s a copy never the less. Therefore,
it completely satisfies the definition of pass-by-value.
Although
I have never seen a published source refer to this as “pass-by-reference” (as
David claims), I do admit that when you said, “I understood passing
a reference to an object to be termed pass by reference”
you raise a legitimate point that often leads to confusion.
-----Original Message-----
From: David Gallardo [mailto:[EMAIL PROTECTED]]
Sent: Friday,
May 31, 2002 3:50 PM
To: JDJList
Subject: [jdjlist] Re: Java : pass by
reference???
Semantics--he's quibbling with you about semantics.
In
Java, some people don't like to call it "passing by
references." In
certain quarters, they'll boo you down
& not let you finish your
sentence, if you use that
term.
(Despite the references someone
quoted, I can think of
a few other books that unabashedly call it passing
by
reference. But in any case, "appeal to authority" is a
weak
argument.)
It says something about the confusion this causes,
that
you, who got the official terminology wrong, are
the only one who got the
answer right!
--- Nathan Tenney <[EMAIL PROTECTED]>
wrote:
> Perhaps I am wrong, but I understood passing a
> reference
to an object to be termed pass by
> reference...
>
> ---
Tom Jordan <[EMAIL PROTECTED]> wrote:
> >
Nathan,
> >
> > You are description of the "fillMe" argument
and
> the
> > effect of the "fill()"
> > method is
correct, but your assertion that "Java
> > does use pass by
reference"
> > is WRONG.
> >
> > The following
statement is absolutely true: "Java
> > passes all arguments by
>
> VALUE" (references listed below).
> >
> > When passing an
Object it is the object reference
> > that gets passed (not the
>
> object itself) and it is passed by value. In other
> > words, a
copy of the
> > object reference is passed to the method. As
you
> > correctly stated, this
> > reference points the
orginal object and can be
> used
> > to modify the
orginal
> > object thru its public mutator methods.
>
>
> > Tom
> >
> > References:
> >
"Exploring Java" 2nd edition, O'Reilly, Pg 143
> > "Argument Passing
and
> > References"
> > "Java 2 Certification Study Guide",
Sybex, Pg 17
> > "Argument Passing"
> >
> >
>
>
> > -----Original Message-----
> > From: Nathan Tenney
[mailto:[EMAIL PROTECTED]]
> >
Sent: Friday, May 31, 2002 12:36 PM
> > To: JDJList
> >
Subject: [jdjlist] Re: Java : pass by reference???
> >
>
>
> > Ok, I didn't take the time to read all the
>
messages
> > in
> > this thread, so someone may have already
answered
> > this
> > to my satisfaction, but the 4 or 5 I did
read had
> it
> > totally wrong.
> >
> > Java
does use pass by reference. Think of the
> > variable fillMe in
your fill methods has holding a
> > reference to another object.
At the beginning of
> > the
> > method, it refers to the
object you passed in when
> > you
> > called fill.
However, when you used new, you
> > changed
> > which object
fillMe refers to, so any changes made
> > to
> > fillMe at
this point will not touch the original
> > object fillMe referred
to. NOTE: defining a
> String
> > explicitly (with "") is
the same thing as using
> new.
> >
> > The major problem
with your example is that you
> used
> > immutable objects
(String and Integer) as the
> > objects
> > to refer to.
Immutable Objects are those that
> have
> > no
> >
methods for modifying the data that is stored in
> > them.
>
> All you can do with them is create new Objects.
> >
Try
> > this example with StringBuffer instead of String,
> >
and
> > replace fillMe = "test"; with fillMe.append("
> >
test");
> > and you will see a difference in your output.
>
>
> > Hope that was easy to understand.
> >
> >
--- H Shankaranarayanan <[EMAIL PROTECTED]>
> >
wrote:
> > > class test
> > > {
> >
> /**
> > >
* Description of the Method
> >
> *
> >
> *@param fillMe Description of
the
> Parameter
> > > */
>
> > public void fill(String fillMe)
> >
> {
> >
> fillMe = "test";
>
> > }
> > >
> > >
>
> > /**
> >
> * Description of the Method
>
> > *
> >
> *@param fillMe Description of
the
> Parameter
> > > */
>
> > public void fill(Integer fillMe)
> >
> {
> >
> fillMe = new
Integer(100);
> > > }
> >
>
> > >
> > > /**
>
> > * Description of the
Method
> > > *
> >
> *@param args Description of the
Parameter
> > > */
> >
> public static void main(String args[])
> >
> {
> > >
> >
> try
> >
> {
> >
>
test objTest = new test();
> >
>
String testfill = new
> String("main");
> >
>
objTest.fill(testfill);
> >
>
System.out.println("Fill me result:"
> +
> > >
testfill);
> > >
> >
>
Integer intFill = new Integer(200);
> >
>
objTest.fill(intFill);
> >
>
System.out.println("Fill me result:"
> +
> > >
intFill);
> > >
> >
> } catch (Exception
e)
> > > {
>
>
>
e.printStackTrace();
> >
> }
> >
> }
> > > }
> > >
>
> >
> > > That is a sample program i wrote to test
this
> > fact.
> > > The result is dependent
> >
> on scope of the variable.
> > > So wots this pass by reference
concept that
> every
> > > text book around the world
>
> > states about Java.
> > >
> > > How does the
pass by reference concept work
> > anyways?
> > >
>
> > I might have missed something here. If i did i
> >
would
> > > appreciate if anyone
> > > told me wot is it
that i did miss.
> > >
> > > I was expecting this
program to work otherwise
> but
> > > it does not.
>
> >
> > > --Shankar
> > >
> >
>
> > > To change your membership options, refer to:
> >
> http://www.sys-con.com/java/list.cfm
>
>
> >
> > =====
> >
----------------------------------
> > Nathan Tenney
> >
Alumni Utah State University
> > [EMAIL PROTECTED]
> >
----------------------------------
> >
> >
__________________________________________________
> > Do You
Yahoo!?
> > Yahoo! - Official partner of 2002 FIFA World Cup
>
> http://fifaworldcup.yahoo.com
>
>
> > To change your membership options, refer to:
> > http://www.sys-con.com/java/list.cfm
>
>
> >
> > THIS TRANSMISSION, INCLUDING ANY ATTACHMENTS
OR
> > FILES,
> > CONTAINS AIRNET COMMUNICATIONS
CORPORATION
> > CONFIDENTIAL
> > AND PROPRIETARY INFORMATION
WHICH MAY BE OTHERWISE
> > EXEMPT
>
=== message truncated
===
__________________________________________________
Do You
Yahoo!?
Yahoo! - Official partner of 2002 FIFA World Cup
http://fifaworldcup.yahoo.com
To
change your membership options, refer to:
http://www.sys-con.com/java/list.cfm
http://www.sys-con.com/java/list.cfm
THIS TRANSMISSION, INCLUDING ANY ATTACHMENTS OR FILES,
CONTAINS AIRNET COMMUNICATIONS CORPORATION CONFIDENTIAL
AND PROPRIETARY INFORMATION WHICH MAY BE OTHERWISE EXEMPT
FROM DISCLOSURE.
The information is intended to be for the exclusive use of the individual
or entity named above. If you are not the intended recipient,
be advised that any disclosure, copying, distribution or other use
of this information is strictly prohibited. If you have received this
transmission in error, please notify us by telephone at 1-321-984-1990 or
by email to [EMAIL PROTECTED] immediately and do not read, print
or save this information in any manner.
