黑马程序员技术交流社区

标题: 这道题为什么是选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
woshijingke 发表于 2016-5-29 00:10
字符串的值只能初始化一次,之后就不能在改变了,是常量,存储在常量池中 ...

明白了,感谢!!
作者: 来了都是heima    时间: 2016-5-30 23:31
RAo_w82Si 发表于 2016-5-29 10:27
当你调用show方法的时候show方法进栈内存,然后在堆内存中创建一个S2+S1+"Q"的对象地址值赋给show方法中的S ...

大神分析得很有道理,满分~~~
作者: 来了都是heima    时间: 2016-5-30 23:33
lizhenzhen 发表于 2016-5-29 13:07
因为S1 S2局部变量,虽然执行了show方法,但是没有改变S1S2值

大神分析得有道理,感谢!!!
作者: 来了都是heima    时间: 2016-5-30 23:34
曾宇 发表于 2016-5-29 13:02
方法参数中的变量是形参。不要被String s1 误导了。
简单点说,就是作用域不同。
main方法中的s1,和show方 ...

分析内存才知道,感谢大神指点!!!
作者: 来了都是heima    时间: 2016-5-30 23:35
王子鹏 发表于 2016-5-29 11:19
字符串是常量 不是变量

是的,赋值一次就不能被改变了
作者: 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