这段程序的输出?

ruodeer 2007-12-24 09:20:10
public class PassS{

public static void main (String [] args) {
PassS p = new PassS();
p.start();
}

void start(){
String s1 = "slip";
String s2 = fix(s1);
System.out.println(s1+" "+s2);
}

String fix (String s1){
s1 = s1 + "stream";
System.out.print(s1 + " ");
return "stream";
}
}

---------
上段代码的输出 ,和原因???
...全文
98 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
老紫竹 2007-12-25
  • 打赏
  • 举报
回复
slipstream stream stream

s1 = s1 + "stream"; // 此时s1 = slipstream, 但此数值无法影响main里面的s1,因为String是不能修改的,此方法的s1 与main里面的s1虽然一开始指向了同一个地址,但这里他们指向了不同的地址了!所以main里面的s1依然是 slip.

System.out.print(s1 + " ");
return "stream"; // 此字符串将传递个s2



提示:String由于不能修改,所以导致问题产生。
对于普通的可修改类,此处的任何修改都将影响到原始对象,因为他们指向了同一个对象地址
cursor_wang 2007-12-24
  • 打赏
  • 举报
回复
输出没有问题啊!
void start(){
String s1 = "slip";
String s2 = fix(s1); //这里先输出fix(s1)方法里的s1=s1+"stream"; 就是s1="slip"+"stream"+" " 不换行,再把方法返回的"stream"赋给s2.
System.out.println(s1+" "+s2); //这里输出s1="slip" 再空格,再s2,就是stream.
}
ltc_mouse 2007-12-24
  • 打赏
  • 举报
回复
没什么特别的啊,楼主是觉得哪部分输出比较怪异?

搞清楚变量的作用域就可以了啊

62,616

社区成员

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

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