黑马程序员技术交流社区
标题: 这道题为什么是选A?? [打印本页]
作者: 来了都是heima 时间: 2016-5-29 00:03
标题: 这道题为什么是选A??
1. 下面程序的运行结果是什么( A )
public static void main(String[] args){
String s1 = “abc”;
String s2 = “xyz”;
show(s1,s2);
System.out.println(s1+”-----”+s2);
}
static voidshow(String s1,String s2){
s1 =s2+s1+”Q”;
s2 = “W”+s1;
}
a) abc-----xyz
b) xyzabcQ-----xyzWabc
c) xyzabcQ----xyzabcQWabc
d) xyzQ----Wabc
作者: woshijingke 时间: 2016-5-29 00:10
字符串的值只能初始化一次,之后就不能在改变了,是常量,存储在常量池中
作者: 我love 时间: 2016-5-29 00:16
字符串是常量,初始化之后就不会改变,对象怎么都不会改变的
作者: Aaron9527 时间: 2016-5-29 00:16
show方法返回了这两个常量的地址值,但是并没有用一个变量来接收,show完后,下一句话开始,show之中的变量就被释放掉了。如果打印的是System.out.println(show(s1,s2));就是得出你想要的答案
作者: android_vae 时间: 2016-5-29 10:14
应该和常量没关系,而是因为show方法中的形参只在方法内起作用,改变变量的值并不会修改主方法中变量的值
作者: RAo_w82Si 时间: 2016-5-29 10:27
当你调用show方法的时候show方法进栈内存,然后在堆内存中创建一个S2+S1+"Q"的对象地址值赋给show方法中的S1,S2同理,关键在于show方法结束的时候会弹栈,方法自己从栈内存中消失,存储在方法中的S1,S2地址值自然也 消失了 此时,输出语句调用的自然是本身的S1,S2,如果你想输出改变后的字符串,只需要将输出语句位置放在show方法中就行了
作者: 王子鹏 时间: 2016-5-29 11:19
字符串是常量 不是变量
作者: 曾宇 时间: 2016-5-29 13:02
方法参数中的变量是形参。不要被String s1 误导了。
简单点说,就是作用域不同。
main方法中的s1,和show方法中的s1不是一个参数。
相当于两个方法中的两个名字相同但内存地址不同的两个参数。
作者: lizhenzhen 时间: 2016-5-29 13:07
因为S1 S2局部变量,虽然执行了show方法,但是没有改变S1S2值
作者: 来了都是heima 时间: 2016-5-30 23:28
明白了,感谢!!
作者: 来了都是heima 时间: 2016-5-30 23:31
大神分析得很有道理,满分~~~
作者: 来了都是heima 时间: 2016-5-30 23:33
大神分析得有道理,感谢!!!
作者: 来了都是heima 时间: 2016-5-30 23:34
分析内存才知道,感谢大神指点!!!
作者: 来了都是heima 时间: 2016-5-30 23:35
是的,赋值一次就不能被改变了
作者: TomZhou 时间: 2016-6-1 10:45
字符串是常量
作者: haizi004 时间: 2016-6-1 12:36
还没学习到这里来。
作者: ljd 时间: 2016-6-1 16:51
虽然调用了show() 方法,但是show()的s1和s2只在方法中起作用,二打印输出的s1和s2是你定义的s1、s2的值,并不是方法体中的值
作者: 奕明传媒 时间: 2016-6-1 19:33
shows方法中的s1和s2是局部变量,输出的是成员变量的s1和s2
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |