class a{
private X abc=null;
...
// I call m(abc) in main
private void m(X a){
System.out.println(a==abc);// a==abc is true,这里a==abc是true
a = new Y();
System.out.println(a==abc);// a==abc is false,为什么这里a==abc是false?
}}
解决方案 »
- jar取路径王阿提
- jvm有哪些Option?
- 杀人游戏开发中...
- [转贴]找工作的兄弟们看过来了!IT外企的要求
- 字符串的调用~~
- win2003安装jdk5.0时提示default charset no supported请问如解决??高手指帮忙。。急啊。在线等!!!
- kao,J2sdk1.4.2完整版竟然都要在线安装,但是搞了半天又装不上.
- java socket连接ftp问题
- 如何在drawString绘出的文字上加入背景颜色!!!!
- Microsoft SQL Server 2000 JDBC支持rs.first()吗?我新下载的JDBC驱动怎么不支持,请教!!
- 高手帮帮忙
- 怎么把字符串里装的类名读出来,并用它NEW 对象!在线等!
private void m(X a){
System.out.println(a==abc);// a==abc is true,这里a==abc是true,因为a和abc都没指向一个确定的 象,他们代表的引用值都为空,a是abc的复制
a = new Y();
System.out.println(a==abc);// a==abc is false,为什么这里a==abc是false?因为a指向了一个在内存中的对象,所以abc不等
}
可以测试一下 几个很小的语句,加深理解。简单点说:==是判断两个变量或实例是不是指向同一个内存空间
equals是判断两个变量或实例所指向的内存空间的值是不是相同
第二个:a=new Y(), b=null => a!=b
equals是判断两个变量或实例所指向的内存空间的值是不是相同
这句话值得商榷,equals比较的也是引用地址,而不是值但是有的类重写了equals方法,所以比较的是值
像String类
我觉得楼主没有明白方法里的参数如果是引用类型传的是引用地址,如果是基本数据类型传的就是值abc---->null
传入后
abc---->null<----a
a = new Y()
a------>Y
而
abc---->nullabc不会指向新的对象
即使开始abc指向了一个对象,在m方法中,让a指向一个新对象,abc也不会指向一个新对象
如果这样的话就没必要传abc了啊,直接在m方法里
abc = new Y(); 就可以了啊反正abc是成员变量
建议多了解一点java内存管理方面的东西,可以找高手请教一下
private X abc=new X();
...
// I call m(abc) in main
private void m(X a){
// a->X<-abc
a.Z = new Y();//如果这样,abc.Z 会指向Y,a.Z也会指向Y,为什么呢?
}}class X{
public Z zzz;
}
a与abc指向了同一个对象a.zzz--->Y<---abc.zzz
因为a与abc指向了同一个对象
所以a改变对象里的值,abc也会改变对象里的值
无论对象里的值是引用类型还是基本数据类型总结:
引用传递
1.在形参中改变对象的值,实参中的值也要改变
2.在形参中改变引用指向的对象,实参中不会改变
是的,我的意思是通过a让abc指向一个新对象。
我是想要用递归写个树的插入方法,用递归方法传入树节点,但是不能通过a让abc指向一个新对象,所以我需要换个实现的方法了