黑马程序员技术交流社区
标题:
关于String传值
[打印本页]
作者:
张艳艳
时间:
2013-1-5 16:29
标题:
关于String传值
本帖最后由 张艳艳 于 2013-1-9 14:45 编辑
public class TestStirng
{
public static void test(String str)
{
str = "red";
}
public static void main(String[] args)
{
String color = new String("green");
test(color);
System.out.println(color); //
为什么打印的是green而不是red???
}
}
求详解
作者:
王少雷
时间:
2013-1-5 17:04
String color = new String("green");
//这里其实创建两个对象,一个是开了空间在栈里面存的是"green",一个是color
test(color);
//这时候你调用了方法,改变的是color的值变为red 栈里面有值。
但是由于String为引用对象,在主函数并没有被传回来,你没有用变量去接
System.out.println(color); //此时打印的还是第一次栈里面值 green
作者:
张森
时间:
2013-1-5 17:25
LZ 这里其实涉及到了函数的调用过程,并不是因为你么有return。
1、当你调用test(String str)方法的时候 虚拟机首先会进入test方法运行,test方法有一个String变量,
这个Stirng对象只对test方法有效。
2、然后我们的主函数会将color实参传入给test方法,为String对象分配内存并传值,然后进行运算。
就上面的函数调用过程可以看出
就算你在test函数里面 返回了return str 那么打印出来的依然是green
作者:
何竹冬
时间:
2013-1-5 23:03
本帖最后由 何竹冬 于 2013-1-6 14:18 编辑
你好
当你在调用test方法时,实际在栈内存中创建了一个临时的字符串引用来接受你传入的引用。
当你将栈中的引用指向red字符串的时候改变了这个引用但是原来的引用值没有改变。
你可以在test方法中返回str然后在主函数中接受就可以改变原引用的值。
public class Test
{
public static String test(String str)
{
str="red";
return str;
}
public static void main(String[] args) throws Exception
{
String str="green";
str=test(str);
System.out.println(str);
}
}
复制代码
打印结果是red.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2