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{
public static String changeStr(String str){
str = "welcome";
return str;
}
public static void main(String[] args){
String str = "1234";
str=changeStr(str);
System.out.println(str);
}
}

这个输出的应该是welcome,比较一下不同之处!

5.Re:to:jameszhang [Re: shjan_zju] Copy to clipboard
Posted by: jameszhang
Posted on: 2006-06-05 19:10

shjan_zju wrote:
出了作用域对象被释放,那么应该是str=null,为什么又会是原来的值呢?

释放 的是在 方法里 产生的新对象, 而你调用处 的还是原来的

6.Re:字符串的疑惑 [Re: Skybus] Copy to clipboard
Posted by: jameszhang
Posted on: 2006-06-05 19:12

Skybus wrote:
public class Test{
public static String changeStr(String str){
str = "welcome";
return str;
}
public static void main(String[] args){
String str = "1234";
str=changeStr(str);
System.out.println(str);
}
}

这个输出的应该是welcome,比较一下不同之处!

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:
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",大家帮忙看看~小弟不太明白~

我是一个初学者,刚看到这个问题我也比较迷惑,但是想了一下,我觉得楼主的意思是,我在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