当前位置: 技术问答>java相关
java中如果对象是函数参数 到底是传值还是引用???
来源: 互联网 发布时间:2015-07-29
本文导语: 有的书上说是传值 有的说是引用 我知道数组是按引用传递 否则Array中的Sort也不会有作用 但是对象传值我就不太明白了 比如 Data day = new Data(); ... static void Change( Data d, int num ) { num *= 365; d.Add( d.DAY, ...
有的书上说是传值 有的说是引用 我知道数组是按引用传递 否则Array中的Sort也不会有作用
但是对象传值我就不太明白了 比如
Data day = new Data();
...
static void Change( Data d, int num )
{
num *= 365;
d.Add( d.DAY, num ); // 修改日期 增加一年
} 那么 Class.Change( day, 1 );就可以改变day的值
那么既然按引用传递过来 那么 参数d 和day 应该不在同一出地址 他们的数据成员地址也不会相同 只是方法可以共享 那么这不就有了矛盾吗 既然d和day不同 那么d的值改变了
day的值 怎么会改变呢?
但是对象传值我就不太明白了 比如
Data day = new Data();
...
static void Change( Data d, int num )
{
num *= 365;
d.Add( d.DAY, num ); // 修改日期 增加一年
} 那么 Class.Change( day, 1 );就可以改变day的值
那么既然按引用传递过来 那么 参数d 和day 应该不在同一出地址 他们的数据成员地址也不会相同 只是方法可以共享 那么这不就有了矛盾吗 既然d和day不同 那么d的值改变了
day的值 怎么会改变呢?
|
是不起作用,其实把引用当指针来想就清楚了
比如d1指向对象的地址为1111,d2地址为2222,在函数中地址的值交换为d1->2222,d2->1111,但返回后"在一个方法中 不会改变参数的值",所以d1又变回1111,d2变回2222,这样的话他们又指向原来的对象,所以d1/d2交换未成功。
比如d1指向对象的地址为1111,d2地址为2222,在函数中地址的值交换为d1->2222,d2->1111,但返回后"在一个方法中 不会改变参数的值",所以d1又变回1111,d2变回2222,这样的话他们又指向原来的对象,所以d1/d2交换未成功。