菜鸟问

buptstwyg 2009-09-09 03:28:11
public class test4 {
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
...全文
302 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
mint_wei 2009-09-11
  • 打赏
  • 举报
回复
如果有空可以试试
public class test4 {
public static void changeStr(String str){
str="welcome";
}
public static void main(String[] args) {
String str="1234";
System.out.println(changeStr(str));
}
}
qq88688868 2009-09-11
  • 打赏
  • 举报
回复
String str="1234";
把他声明称静态的全局变量呢 这样的话就是引用同一块地址空间了
我感觉也可以输出welcome
liujun3512159 2009-09-11
  • 打赏
  • 举报
回复
当然是1234呀

///////////
public class test4 {
public static void changeStr(String str){
str="welcome";
}
public static void main(String[] args) {
String str="1234";
changeStr(str);
System.out.println(str);
}


}
其实函数 changeStr(str);
没有改变变量str的值呀
JACKY_fFENG 2009-09-11
  • 打赏
  • 举报
回复
同意一楼
O爱咋咋地O 2009-09-11
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 happyperson 的回复:]
public static void changeStr(String str){
        str="welcome";
    }
此方法中的str是一个局部变量 只是传值作用。

[/Quote]

你盗用我头像啊!!!!~
O爱咋咋地O 2009-09-11
  • 打赏
  • 举报
回复
调用changeStr()的时候 只是把当前的引用str 赋给了 形参str 也就是说他俩保存的是一样的地址

changeStr函数里 又把形参str 的地址指向了其他地方 但是 主函数里的 str 地址还是保持没变的呀
还是指向原来的 1234
fskjb01 2009-09-10
  • 打赏
  • 举报
回复
晕,全局变量跟局部变量的区别啊,搞什么飞机啊!!!
laopeng2 2009-09-10
  • 打赏
  • 举报
回复
三位一体加业务知识(java,数据库、应用服务器+业务),才是java学习的正道,
http://javadbserver.ucoz.com/
http://javadbserver.free.mingyao.net
24K純帥 2009-09-10
  • 打赏
  • 举报
回复
1L正解,加上return..
qq121199529 2009-09-10
  • 打赏
  • 举报
回复
我是这样理解的,你用changeStr(str); 只是用str新开辟了一个堆内存,可是这样做并没有改变以前的那个堆内存中的数据,所以这样做没起到作用!所以就要用到str=changeStr(str).
羽蓝 2009-09-10
  • 打赏
  • 举报
回复
String是引用类型的。改变的是地址,不是值。
szw880314 2009-09-09
  • 打赏
  • 举报
回复
局部变量的问题
dz007 2009-09-09
  • 打赏
  • 举报
回复
基础类型都是这样,给他赋新的值,他就指向新的那个"welcome"

而不是吧原来的那个值改成"welcome"
wx718 2009-09-09
  • 打赏
  • 举报
回复
改法一:
public class test4 {
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);
}
}
Empty1024 2009-09-09
  • 打赏
  • 举报
回复
String可以说成是一个特殊的原子类型
Y569778402 2009-09-09
  • 打赏
  • 举报
回复
哎一个小问题也被你没说的很复杂

你们很行嘛 嘲笑他人
meng1503159 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 buptstwyg 的回复:]
public class test4 {
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
[/Quote]
结果确实是:1234,因为你在main函数中也定义了一个str变量,当你执行:System.out.println(str);时,这条语句里的str其实是你在main函数中定义str变量。所以显示:1234
happyperson 2009-09-09
  • 打赏
  • 举报
回复
public static void changeStr(String str){
str="welcome";
}
此方法中的str是一个局部变量 只是传值作用。
dajiadebeibei9 2009-09-09
  • 打赏
  • 举报
回复
因为String str="1234"; 是main方法中的局部变量
str="welcome"; 是changeStr中的局部变量
两个相互不影响
java中没有不能传地址 只有值传递
yuhongpingimu 2009-09-09
  • 打赏
  • 举报
回复
wushibuxiaobaibu。
加载更多回复(16)

62,621

社区成员

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

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