6 ms·
This is not at all correct because passing by reference and value have defined and distinct meanings. Consider the difference between C++, which has actual pass
by okmjuhb 16y ago
This is not at all correct because passing by reference and value have defined and distinct meanings. Consider the difference between C++, which has actual pass by reference:
void swap(int& x, int& y) { int t = x; x = y; y = t; }, and Java: void swap(Integer x, Integer y) { Integer t = x, x = y; y = t; }. The C++ version will result in changes to the variables in the calling function and the Java version will not.
The real problem is that Java created needless confusion by calling its pointers references for purely marketing reasons.
- binaryfinery 16y agoNo the real problem is that you fail to understand that Java gets to call these things what ever it likes because language has context. And your example fails to compare apples to apples. In Java Integer is an object, but int is not. You are confusing Java things with C++ things. As you can see, Java is not C++, and so your C++ terms and definitions do not apply here. Thank you for playing. Move along.
- okmjuhb 16y ago"No the real problem is that you fail to understand that Java gets to call these things what ever it likes because language has context." This is silly; "pointer" and "reference" both had meanings before Java came along. If Java called pointers "names" instead of "references" it wouldn't mean that its function call semantics were pass-by-name either. And besides; if your argument is that we should use the Java terminology to describe all the aspects of Java under discussion, the fact that the all the Java designers make explicit that the function call semantics pass references as values, not objects as values. "And your example fails to compare apples to apples. In Java Integer is an object, but int is not. You are confusing Java things with C++ things." The argument applies if you use int in place of Integer just the same; or if you make a C++ Integer wrapper class analogous to the Java one. Any comparison here will of course be apples to oranges because C++ supports pass by reference and Java does not. The swap function is impossible to write in Java because it requires allowing called functions to change the values viewed in the caller, which is almost the definition of passing arguments by value. "As you can see, Java is not C++, and so your C++ terms and definitions do not apply here. Thank you for playing. Move along." Leaving aside the childish and insulting tone, the definition of "pass by reference" has nothing to do with C++; if the code were in perl it would still be pass by reference, because "pass by reference" has a meaning that exists outside of any particular programming language and describes a concept. Java function calls are not part of that concept; "there is exactly one parameter passing mode in Java - pass by value".
- binaryfinery 16y agoIn which case there is no such thing as passing by reference. Ever. In C++ when you "pass by reference", what actually happens is that the address of the thing is taken, and a pointer is generated, and then that pointer is passed by value. Do you see? Any argument you put forth to the contrary will involve language specific features and conventions of C++. Your will have to claim that because the C++ compiler does this for you, that makes it special. In Java there are primitives and objects. Primitives are only passed by value. Objects are passed by reference. If you pass an object as a parameter, and then modify a property of the parameter, then it is the original object that is modified. This, in fact, is the same as when you pass an Object in C++ by reference. In contrast, in C++ you can also pass an object by value: the entire object is copied onto the stack. class Foo; void modify( Foo& x) { x.setBar(1);} ; <- pass by reference in C++. class Foo; void modify( Foo x) { x.setBar(1);} ; <- pass by reference in Java. Java spares you the & because Java only passes by reference. Again, to argue the contrary, simply because it passes an object pointer by value, automatically, is to argue that C++ never passes by reference because it too takes the address automatically. The fact is that Java passes by reference exactly as C++ does. However, even if this were not the case, it would also be completely acceptable for Java to refer to what it does as pass by reference simply because it chooses too. These things are object references. If I pass a java object reference, is it acceptable to say I'm passing by reference? If Java people want to say it is, then it is. Will the world end, for example, because the word "heap" means two different things in computer science? http://en.wikipedia.org/wiki/Heap http://en.wikipedia.org/wiki/Heap OMG! Who is right? My point is basically summed up here: http://xkcd.com/435/ http://xkcd.com/435/ You are where the physicist is standing. You insist that Java biologists are using your terms wrong while oblivious to the mathematician. You have your abstractions. Java has theirs. Of course, maybe you're the chemist, and I'm the physicist (I still write assembly) and the hardware guys are the mathematicians. Whatever. As for the insulting tone, yes its a character flaw. When someone makes a statement like "I'm really tired of hearing folks (incorrectly) state [whatever]", its insulting. Its especially insulting when its wrong. In an ideal world I'd be able to respond without resorting to responding in kind, but I'm flawed. Sorry. You're still wrong.
- okmjuhb 16y ago