JAVA 把对象作为方法参数不改变原对象?

来源:百度知道 编辑:UC知道 时间:2024/06/11 09:07:15
先看代码!
public class ItemTest {
public static void main(String args[])
{
Item it=new Item();
it.setString("one");
System.out.println(it.getString());
Item.modifyDesc(it);
System.out.println(it.getString());
}
}
class Item{
private String desc;
public String getString()
{
return desc;
}
public void setString(String s)
{
desc=s;
}
public static void modifyDesc(Item item)
{
item=new Item();
item.setString("change");
}
}
===============================================================
结果是:
one
one

这句Item.modifyDesc(it)把it对象作为了方法的参数,这不是引用传递吗?如果是那在方法里被改变了,it对象也就改变了啊,为什么还是没变?谢谢你的回答!
我自己想透了modifyDesc(Item item)这里的item和外面的it是指向同一快内存但它们是不同变量,在方法体里面,item改变了所指向的内存,所以对内存的修改不影响it所指向的内存。

概括就是:引用传

Item it=new Item();
中包含两个东西,一个是it,一个是new Item();,it是句柄,就像一个人的名字一样,new Item();是值,就像一个人一样,这句话的意思就是将it设为new Item();的引用句柄,当调用Item.modifyDesc(it);方法时,传进去的参数是it,其实就是传一个句柄来引用new Item()这么一个值。而在方法 public static void modifyDesc(Item item)中,item代表的就是Item.modifyDesc(it);传进去的句柄it,他们(item和it两个句柄)的值引用的对象是同一个,但是在public static void modifyDesc(Item item)里,你执行了item=new Item();导致item这个句柄的引用指向了其他一个对象,不是原来传进去的那个it所引用的对象了。
当然,对于两个不同的对象来说,你改变了一个,另一个肯定不会随着改变了。

public static void modifyDesc(Item item)
{
item=new Item();
item.setString("change");
}
这个地方item=new Item();之后,item指向了新的对象实例,setString是在新实例上进行的操作。所以不影响旧的item