I'll try to answer this:
when you pass a reference of an object to a method call, (in the first case:btn ), you actually pass a copy of the reference, the new reference is "replaceMe", on this point we have two reference to the same object (created with new Button("Good"); ), but when you assign a new object to the second reference, the first remains unchanged
On the other code -code 2-, both references have the same object reference ( created with new TextField("Yin")

, and thus, both can modify its attributes and access its methods, in this case second referece "changeMe" performed the setText(
String) method, and the first reference reflects the canges too, because there is only one object and two references to the same object.
Consider this code:
<pre>
1. public class ReferenceObject {
2. int attribute= 0;
3. void aMethod(){
4. attribute = attribute + 1 ;
5. }
6. public static void main(String args[]){
7. ReferenceObject one = new ReferenceObject();
8. ReferenceObject two = one;
9. System.out.println(one.attribute);
10. two.aMethod();
11. System.out.println(one.attribute);
}
}
</pre>
output:
0
1 The reference "two", change the "attribute" of the object created on line no. 7 "new ReferenceObject();"
and the reference one , (reference to the same object), can show us in lines 9 and 11.
If in the other hand you create two objects well...
see next code
<pre>
1. public class ReferenceObject {
2. int attribute= 0;
3. void aMethod(){
4. attribute = attribute + 1 ;
5. }
6. public static void main(String args[]){
7. ReferenceObject one = new ReferenceObject();
8. ReferenceObject two = new ReferenceObject();
9. System.out.println(one.attribute);
10. two.aMethod();
11. System.out.println(one.attribute);
}
}
</pre>
output:
0
0 In this case reference two change the attribute of a second object, and thus object of reference "one", remains unchanged
Ufff!!!, I hope this modest explanation make thins clear,
and not confuse you more.

)
If anybody can further my explanation and/or correct me, you're welcome.
[