一道SCJP的题目,高手来帮忙看下

Wallace_YyBm 2009-09-15 11:38:04
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?高手帮忙看下...
...全文
173 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
24K純帥 2009-09-24
  • 打赏
  • 举报
回复
传值。。
lereke 2009-09-23
  • 打赏
  • 举报
回复
学习了~~
SBtoSB 2009-09-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yanliang_xt 的回复:]
引用 3 楼 wallace_yybm 的回复:
我本来觉得传进去的是it的地址,那么这个代码:item = new Item(); 再new出来的item,不是应该会在堆内存中和原来it一样的地址(就是传进it的那个地址),即:会覆盖了原来的it对象么,那么既然覆盖掉了,原来的就不存在了,所以出来应该报错,或者出来时改变后的值才对?想不通啊........


你要明白java中引用是什么意思。以及java中都是值传递的。
[/Quote]
你自己也要搞明白是什么情况下是传值还是地址。
da357085813 2009-09-23
  • 打赏
  • 举报
回复
求一详细介绍javascript的电子书籍
wxzyydy 2009-09-15
  • 打赏
  • 举报
回复
帮忙顶顶,顺便接点分,谢谢
Wallace_YyBm 2009-09-15
  • 打赏
  • 举报
回复
我本来觉得传进去的是it的地址,那么这个代码:item = new Item(); 再new出来的item,不是应该会在堆内存中和原来it一样的地址(就是传进it的那个地址),即:会覆盖了原来的it对象么,那么既然覆盖掉了,原来的就不存在了,所以出来应该报错,或者出来时改变后的值才对?想不通啊........
lovecj6185 2009-09-15
  • 打赏
  • 举报
回复
楼上的朋友果然是沙发大王啊,呵呵
而且说的也对,同意
yanliang_xt 2009-09-15
  • 打赏
  • 举报
回复
因你在那个方法里有这么个代码:item = new Item();

此时的item已经不是原来的it所指向的对象了,而是指向了一个新的对象,item.setDescription(desc);
这样只是对新对象的修改,并没有对原有对象产生影响。
hectora 2009-09-15
  • 打赏
  • 举报
回复
接分了
governlee 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wallace_yybm 的回复:]
我本来觉得传进去的是it的地址,那么这个代码:item = new Item(); 再new出来的item,不是应该会在堆内存中和原来it一样的地址(就是传进it的那个地址),即:会覆盖了原来的it对象么,那么既然覆盖掉了,原来的就不存在了,所以出来应该报错,或者出来时改变后的值才对?想不通啊........
[/Quote]

何谓之new?就是申请一个新的空间嘛,不是覆盖掉了。
tfsict2008 2009-09-15
  • 打赏
  • 举报
回复
java 里面所有都是传值,你说那种情况叫传递引用
yanliang_xt 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lovecj6185 的回复:]
楼上的朋友果然是沙发大王啊,呵呵
而且说的也对,同意
[/Quote]

呵呵,现在竞争激烈,沙发不好抢的。一段时间没看你来了。
yanliang_xt 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wallace_yybm 的回复:]
我本来觉得传进去的是it的地址,那么这个代码:item = new Item(); 再new出来的item,不是应该会在堆内存中和原来it一样的地址(就是传进it的那个地址),即:会覆盖了原来的it对象么,那么既然覆盖掉了,原来的就不存在了,所以出来应该报错,或者出来时改变后的值才对?想不通啊........
[/Quote]

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

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧