java传参的问题

public class mainclass{
public static void main(String[] args){
Property MyProperty[]=new Property[2];
Operate MyOperate=new Operate();
MyOperate.UpdateAge(MyProperty[0]); ///这个是可以成功更新信息
MyOperate.deleteAge(0,MyProperty); ///这个是可以删除数据
MyOperate.deleteAge1(MyProperty[0]); ///这个是不可以删除数据
System.out.println(MyProperty[0].getIntAge());
}
}
public class Property{
private int intAge;
public void setIntAge(int intAge){
this.intAge=intAge;
}
public int getIntAge(){
return this.intAge;
}
}
public class Operate{
public void UpdateAge(int intAge,Property MyProperty){
Property arr=new Property;
arr=MyProperty;
arr.setIntAge(23);
MyProperty=arr;
}
public void deleteAge(int intIndex,Property MyProperty[]){
MyProperty[intIndex]=null;
}
public void deleteAge1(Property MyProperty){
MyProperty=null;
}
}
问题:UpdateAge可以通过传MyProperty某一条数据然后成功更新数据,而在做MyProperty某一条数据设置为null时,只能传整个数组进去,以MyProperty[intIndex]=null这样的方式设置为null(如deleteAge函数),而不能直接像UpdateAge函数一样,通过传MyProperty某一条数据进入函数,然后直接设置为null,因为即使当前函数设置成功,但返回主函数后,什么也没发生改变,求解答。谢谢。

你的这个程序有问题吧~~追问

有什么问题??这只是一组伪代码,只是想问问是什么原因。只是在写代码时候,发现的一个小问题。

追答

如果你说得没错的话,应该就是传入方法的是实体(本身),还是copy以后的实体(分身)的问题,如果传入方法的是本身的话,在方法里面改变,也就改变了main方法里面的对象,但是如果传入的是分身的话,也就是在入参处理的地方,没有传入本身,而是按照本身copy了一个传了进去,这个分身是有生命周期的,当方法改变其内容的话,分身改变了,但是和本身不是同一块内存,所以本身没有改变,也就是mian方法里面没有改变,当方法改变分身的内容后执行完毕的时候,分身的生命周期结束,被释放,在mian里面看的实体依旧的内容却没有改变。String就是这种问题

public class MainClass{
   public static void main(String[] args){
  String str = "ssss";
  System.out.println("m before : " + str);
  show(str);
  System.out.println("m after : " + str);
   }
   
   static void show(String str){
   System.out.println("f before : " + str);
   str += "tttt";
   System.out.println("f after : " + str);
   }
}

追问

对,其实我问的就是这个问题,我在问题里面说明了,为什么同样传的是MyProperty[0],在UpdateAge可以更新,然而在deleteAge1里却无法再main里发生改变。一定要整个MyProperty传进去,然后对MyProperty[0]设置为为null才行(就如deleteAge),这就是我疑惑的地方。

追答

可以给一个demo么,能够重现的demo,不然上面的也只是猜测~~~

追问

http://tieba.baidu.com/p/2912855952
因为代码太长你去这个网址看一下,不好意思,麻烦你了。

追答

请问一下,你对java的低层熟悉吗?我画一个图给你,看你能不能懂~~~

追问

好的·你可以画在那个贴吧里面,这个好像长度有限制·

好的·你画一下·,你可以画在那个地址下面的贴吧里

追答

http://blog.csdn.net/fzhsh/article/details/20933003 看下这个,写了一篇博客

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-10
程序是有点问题追问

有什么问题·这只是一组伪代码,只是想问问是什么原因。只是在写代码时候,发现的一个小问题。

相似回答