Topic: 字符串的疑惑 |
Print this page |
1.字符串的疑惑 | Copy to clipboard |
Posted by: shjan_zju Posted on: 2006-06-04 15:18 public class Test{ public static void changeStr(String str){ str = "welcome"; } public static void main(String[] args){ String str = "1234"; changeStr(str); System.out.println(str); } } 输出为什么是"1234",而不是"welcome",大家帮忙看看~小弟不太明白~ |
2.Re:字符串的疑惑 [Re: shjan_zju] | Copy to clipboard |
Posted by: jameszhang Posted on: 2006-06-04 15:34 String 是不可变长 的 字符串对象 ,如果改变长度 则 会生成新对象,呵呵 新对象 是在 changeStr 中,出了作用域 新对象 就被释放 ,原来对象 所以没变 |
3.to:jameszhang [Re: shjan_zju] | Copy to clipboard |
Posted by: shjan_zju Posted on: 2006-06-05 11:20 出了作用域对象被释放,那么应该是str=null,为什么又会是原来的值呢? |
4.Re:字符串的疑惑 [Re: shjan_zju] | Copy to clipboard |
Posted by: Skybus Posted on: 2006-06-05 15:36 public class Test{ 这个输出的应该是welcome,比较一下不同之处! |
5.Re:to:jameszhang [Re: shjan_zju] | Copy to clipboard |
Posted by: jameszhang Posted on: 2006-06-05 19:10 shjan_zju wrote: 释放 的是在 方法里 产生的新对象, 而你调用处 的还是原来的 |
6.Re:字符串的疑惑 [Re: Skybus] | Copy to clipboard |
Posted by: jameszhang Posted on: 2006-06-05 19:12 Skybus wrote:public class Test{ str=changeStr(str); 你的 str 已经 在这里指向了一个新对象 ,当然str 是 welcome ,呵呵 不是在讨论一个问题,他想传引用 直接改 ,返回值了还有什么解释的,呵呵 |
7.Re:字符串的疑惑 [Re: shjan_zju] | Copy to clipboard |
Posted by: gleamyshadow Posted on: 2006-06-05 22:23 shjan_zju wrote: 我是一个初学者,刚看到这个问题我也比较迷惑,但是想了一下,我觉得楼主的意思是,我在main方法中为str定义了新的植"1234",然后将该植传递给changeStr方法中的参数str,然后str的植又被changeStr方法中的str="welcome"语句更改为welcome,所以楼主觉得输出str的直应该是welcome对不对,但是我觉得在main方法中定义的str和changeStr方法中的参数str并不是同一个引用,所以当你在main方法中把"1234"赋给成员变量str后,再执行changeStr方法,这个时候changeStr方法更改的仍然是changeStr方法中参数str的植而不是成员变量str的直,所以输出仍然是"1234",不知这个解释是否正确,请高手指点, |
8.Re:字符串的疑惑 [Re: shjan_zju] | Copy to clipboard |
Posted by: shjan_zju Posted on: 2006-06-05 22:45 呵呵,各位的回答小弟还是不大明白,还有更好的答案吗~ |
9.Re:字符串的疑惑 [Re: shjan_zju] | Copy to clipboard |
Posted by: shjan_zju Posted on: 2006-06-05 23:11 呵呵,小弟明白了,changeStr()传递的是参数是str的副本,changeStr()结束时,str的副本被释放,所以原来的str没有变化~ |
10.Re:字符串的疑惑 [Re: shjan_zju] | Copy to clipboard |
Posted by: xueli Posted on: 2006-06-06 20:40 这是一个关于JAVA方法中参数是值传递还是引用传递的典型例子,与大家共勉! |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |