6 ms·
http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/cplr233.htm http://publib.boulder.ibm.com/infocenter/
by binaryfinery 16y ago
http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/cplr233.htm http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/ind...
IBM has it wrong too then. In each of the examples provided, they dont "make the variable in the calling frame actually point to an entirely new object"
What actually happens is that the object (or value) that is pointed to by the reference is changed. Specifically, if you took the addresses of a and b before the call, and then after the call, you would see that the addresses have not changed. It is the contents that have changed. This is what happens it C++ in all cases. The only difference between C++ and Java is that Java is always pass by reference for objects and always pass by value for primitives.
Pass-by-reference does not mean "I can change the variable in the caller to now point to a new object". It means, if I modify the properties of the parameter, it is modifying the same object that the variable references. In contrast, if you do this in C++:
class Foo; void bar( Foo x ) { x.value++; } void main() { Foo y(0); bar(y); }
You will discover that y's value remains 0. That is pass by value.
class Foo; void bar( Foo &x ) { x.value++; } void main() { Foo y(0); bar(y); }
This is pass by reference. y.value is now 1. So now if this is Java:
class Foo; void bar( Foo x ) { x.value++; } void main() { Foo y(0); bar(y); }
Then y.value is now 1 - just like the pass-by-reference case in C++. So either IBM has it wrong, or you have it wrong.