Dude, learn some CS basics.
>write functions performed on A also apply to B, but read functions from A only apply to B
>write functions performed on B also apply to A WHICH EQUALS B, but read functions from B only apply to B
Which is 100% logical..
A and B both reference the same "adress", therefore if you change one "Object", you automatically change the reference. Of course you only need to read A and not B, because you would otherwise you would read the same thing twice.
In other words:
If you make 10 objects "A, B, C.." (which are only shallow references and not deep copies, that is!) you only need to write to A to change every "object value". But It would be stupid if you want to read A, but also read B, C...
Simple common sense.
>for no intelligent reason, objects pass by reference to other objects, all the time
The "all the time" is wrong, you can simply implement you own cloning method.
Also the reason is that a pass by value mean you copy every value of an object. Imagine you implement a sorting algorithm on a recursive array with 100,000 elements. Maybe something like Quicksort.
Now you really want to "pass by value" and create a new obejct, which means creating an array and copy 100,000 values FOR EACH ITERATION of quicksort?
Really?!?
>but variables never ever ever pass by reference to another variable
This is also a good idea.
Imagine you have a throwaway-variable "i" for calculations. Now you calculate something and set some init value to "i":
(This is only for illustration, not real code)
my_DB_type = "MySQL";
my_DB_name = "sytem xyz";
my_DB_maxUsers = i;
my_DB_Object = newDB(my_DB_type, my_DB_name, my_DB_maxUsers);
But a few lines of code later you do a simple for-loop:
for (i=0; i