public class Item {
private String desc;
public String getDescription() { return desc; }
public void setDescription(String d) { desc = d; } public static void modifyDesc(Item item, String desc) {
item = new Item();
item.setDescription(desc);
 }
 public static void main(String[] args) {
 Item it = new Item();
 it.setDescription("Gobstopper");
 Item it2 = new Item();
 it2.setDescription("Fizzylifting");
 modifyDesc(it, "Scrumdiddlyumptious");
 System.out.println(it.getDescription());
 System.out.println(it2.getDescription());
  }
}那个modifyDesc(it, "Scrumdiddlyumptious");方法传递的it对象,对象传递的不是地址么,为什么方法运行后不会改变原来的it对象,输出结果依旧是Fizzylifting?高手帮忙看下...

解决方案 »

  1.   

    因你在那个方法里有这么个代码:item = new Item(); 此时的item已经不是原来的it所指向的对象了,而是指向了一个新的对象,item.setDescription(desc); 
    这样只是对新对象的修改,并没有对原有对象产生影响。
      

  2.   

    我本来觉得传进去的是it的地址,那么这个代码:item = new Item(); 再new出来的item,不是应该会在堆内存中和原来it一样的地址(就是传进it的那个地址),即:会覆盖了原来的it对象么,那么既然覆盖掉了,原来的就不存在了,所以出来应该报错,或者出来时改变后的值才对?想不通啊........
      

  3.   


    你要明白java中引用是什么意思。以及java中都是值传递的。
      

  4.   

    java 里面所有都是传值,你说那种情况叫传递引用
      

  5.   


    何谓之new?就是申请一个新的空间嘛,不是覆盖掉了。
      

  6.   

    求一详细介绍javascript的电子书籍