黑马程序员技术交流社区
标题:
程序运行结果
[打印本页]
作者:
kong7906928
时间:
2014-6-16 23:33
标题:
程序运行结果
public static void main(String[] args){
String s1 = “abc”;
String s2 = “xyz”;
show(s1,s2);
System.out.println(s1+”-----”+s2);
}
static void show(String s1,String s2){
s1 = s2+s1+”Q”;
s2 = “W”+s1;
}
结果 abc-----xyz
复制代码
结果为什么是abc-----xyz不是xyzabcq-----Wxyzabc
String不是引用类型吗
作者:
╭月牙湾湾╮
时间:
2014-6-17 01:30
你要知道String具有一个特性,那就是不可变性。
String 类代表字符串,字符串常量,一旦创建了,就不能在修改了。
所以不论你的方法里边做什么操作,s1和s2的值是不会变的。
作者:
过犹不及
时间:
2014-6-17 07:25
看了你的题,倒提醒了我一下,我也得再把值传递和引用传递好好再看一下。
作者:
过犹不及
时间:
2014-6-17 07:39
这里面讲的很详细,你看一下http://www.csdn123.com/html/itweb/20131113/219554.htm
作者:
喜爱
时间:
2014-6-17 09:03
好像局部变量和引用变量有差异的!
作者:
杨博
时间:
2014-6-17 09:13
1.首先String类型的final类型的,一旦创建,不会改变,改变的只是引用。
2,方法中的传递的参数只是一个临时变量,在方法体内对Stirng做的任何操作都是引用的改变,而方法一旦结束,方法体内的引用变量出栈,所以对堆内存中的String无影响。
作者:
闪耀.Q
时间:
2014-6-17 11:56
来学习了
作者:
唐坚
时间:
2014-6-17 12:48
字符串最大的特定:一旦被初始化就不可以改变。是一个常量。
作者:
焦国军
时间:
2014-6-17 15:29
你定义的s1和s2 都是局部的,再说show是void不是String
作者:
马宁
时间:
2014-6-17 15:39
来打酱油看看来了 !
作者:
苏周周
时间:
2014-6-17 19:07
s1和s2变量都是在栈内存中,赋值时都是引用地址,当方法结束了,s1和s2指的地址值还是"abc"和“xyz”;
作者:
Ice丶wj
时间:
2014-6-17 20:01
返回值类型是void
作者:
沐阳6011
时间:
2014-6-17 20:13
在show方法中的s1,s2变量是局部变量,调用方法时存在于栈内存中,当方法执行结束后,这里的s1,s2变会出栈,所以你后面的打印语句,打印的是主函数中定义的s1,s2。也就是“abc”"xyz"。主要问题是出在这里。
我把代码改成这样,结果就会是你想要的哦。注释部分是我在验证另外一个问题,不用管。
class TestS
{
public static void main(String[] args)
{
String s1 = "abc";
String s2 = "xyz";
// String s3=s2+s1+'q';
//System.out.println(s3);
show(s1,s2);
//System.out.println(s1+"-----"+s2);
}
static void show(String s1,String s2)
{ s1 = s2+s1+"Q";
s2 = "W"+s1;
System.out.println(s1+"-----"+s2);
}
}
复制代码
作者:
小熊星座
时间:
2014-6-17 20:13
来学习一下
作者:
任黎明
时间:
2014-6-17 21:39
遇到同样问题,来学习了
作者:
gyw520gyw
时间:
2014-6-17 21:40
show方法的s1 s2和主函数的s1 s2都是局部变量,作用域只在各自的大括号内,你想要的结果
public static void main(String[] args){
String s1 = "abc";
String s2 = "xyz";
show(s1,s2);
//System.out.println(s1+"-----"+s2);
}
static void show(String s1,String s2){
s1 = s2+s1+"Q";
s2 = "W"+s1;
System.out.println(s1+"-----"+s2);
}
作者:
北极£莜蓝
时间:
2014-6-17 21:43
有图有真像
作者:
北极£莜蓝
时间:
2014-6-17 22:06
中间有些步骤省略了,示意的.不懂的在问.String是常量.一旦被赋值就不能改变,存储的位置是方法区中的常量池
String.png
(106.58 KB, 下载次数: 10)
下载附件
2014-6-17 22:04 上传
作者:
塔罗
时间:
2014-6-17 22:18
你可以试试在那个show方法中,输入s1,s2看看什么结果。一楼说的很好
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2