总结如下:在JAVA中,作为参数传递如果是基本类型,则是值传递; 如果是复合数据类型(即对象或数组),则是引用,传递句柄;传递后两个引用都应用同一个对象,这时候如果只是将其中一个引用指向另一个对象,则 对另一个引用不产生影响;而如果对其中一个引用做改变,则 两个引用都将改变 在下边的例子中正是将引用指向了另一个对象(NULL),所以 另一个引用不受影响,所以最后的输出结果是a a总结:一般情况下,参数类型为符合数据类型(如数组或类对象)时,自动采用引用的形式, 即传递给方法的是数据在内存中的地址。这时,如果在方法中不去修改形式参数所引用的 句柄,且该对象所属的类定义了设置或修改数据成员的方法,就可以通过对象去调用方法 修改数据成员来达到修改对象的目的,当然,如果该对象所属的类没有定义设置或修改数据成员的方法, 就不能通过引用 改变对象的状态,比如String 类对象问题的提出: public class test { String s = "a"; private void change (test ss) { ss = null; } public static void main(String args[]) { test t = new test(); System.out.println(t.s); t.change(t); System.out.println(t.s); } } 输出结果是什么?为什么? 答案:a a
注意equals的参数是Object因此有可能传入的对象与你的类不同,因此在重载equals()方法是要检查类型,并作动态的“下溯造型”
如果你比较自己定义的类型,在比较之前一定要重载equals()方法,否则你用equals比较就会是==的效果
如果是复合数据类型(即对象或数组),则是引用,传递句柄;传递后两个引用都应用同一个对象,这时候如果只是将其中一个引用指向另一个对象,则
对另一个引用不产生影响;而如果对其中一个引用做改变,则
两个引用都将改变
在下边的例子中正是将引用指向了另一个对象(NULL),所以
另一个引用不受影响,所以最后的输出结果是a a总结:一般情况下,参数类型为符合数据类型(如数组或类对象)时,自动采用引用的形式,
即传递给方法的是数据在内存中的地址。这时,如果在方法中不去修改形式参数所引用的
句柄,且该对象所属的类定义了设置或修改数据成员的方法,就可以通过对象去调用方法
修改数据成员来达到修改对象的目的,当然,如果该对象所属的类没有定义设置或修改数据成员的方法,
就不能通过引用 改变对象的状态,比如String 类对象问题的提出:
public class test {
String s = "a";
private void change (test ss) {
ss = null;
}
public static void main(String args[]) {
test t = new test();
System.out.println(t.s);
t.change(t);
System.out.println(t.s);
}
}
输出结果是什么?为什么?
答案:a a
所以比较时相当于是否equals