黑马程序员技术交流社区
标题:
为什么啊,求解释
[打印本页]
作者:
张东贤
时间:
2013-3-26 21:43
标题:
为什么啊,求解释
本帖最后由 张东贤 于 2013-3-27 12:52 编辑
publicclass Test1 {
publicstaticvoid changeStr(String str){
str="welcome";
}
publicstaticvoid main(String[] args) {
String str="1234";
changeStr(str);
System.out.println(str);
}
}
输出是1234
作者:
我是小白
时间:
2013-3-26 21:48
changeStr()虽然对String做了运算,但是返回类型第void,没有返回值,所以打印的还是原值
作者:
高顺德
时间:
2013-3-26 21:54
在java中都是值传递 你在main方法中传过去的str是main方法的局部变量 当时在栈的值是一个内存地址 地址指向的是堆中的“1234” 所以传过去的只是个地址 然后你把这个地址改成了“welcome” 等方法又返回到main方法中的时候 读出 的还是main方法当前的局部变量str的值所以是“1234”了
作者:
郭金龙
时间:
2013-3-26 22:05
一图以蔽之
无标题.png
(32.84 KB, 下载次数: 31)
下载附件
2013-3-26 22:04 上传
作者:
strawberry2013
时间:
2013-3-26 22:24
public class Test1{
public static void changeStr(String str){
str="welcome"; //此处str指针指向了"welcome"
}
publicstaticvoid main(String[] args) {
String str="1234"; //此处new一个对象"1234"
changeStr(str); //此处将"1234"对象的地址传给changeStr()
System.out.println(str);
}
}
综上, str指向了对象"welcome",故打印为str指向的对象信息
实际上,"1234"分配内存空间仍然存在,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间
作者:
yufeng47
时间:
2013-3-26 22:36
changeStr(String str):中的str是一个局部变量,main方法中的str也是一个局部变量,将main中的str地址传递到changeStr(String str)中,仅仅是改变了这个局部变量str的地址值,及:str="welcome",但是没有将改地址返回给main中的str,所以这两个str指向的地址不是同一个。
即使changeStr(String str)有返回值String,如果不用str来接收返回的地址,那么对main中的局部变量str也不会有影响,最只要的是他们不是同一个引用。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2