黑马程序员技术交流社区

标题: 关于字符串问题 [打印本页]

作者: fyg408224345    时间: 2015-6-24 21:04
标题: 关于字符串问题
class  Test{        public static void main(){
                 String  s1  =  "abc";
                 String  s2  =  "xyz";
                 show(s1,  s2);
                 System.out.println(s1+"-----"+s2);
        }
         public  static  void  show(String  s1,  String  s2){
                  s1  =  s2  +  s1  +  "Q";
                  s2  =  "W"  +  s1;
        }
}


我想问的是为什么最后结果是abc-----xyz   ?

作者: 帅帅loyal    时间: 2015-6-24 21:08
show方法只是单纯的赋值,调用show方法的时候,show入栈,把所有的数值赋值给了s1和s2,此时s1和s2是赋值以后的值,当show方法结束,show出栈,赋值什么的也就都没有了,所以打印的时候就打印的还是原来的s1和s2的值
作者: fyg408224345    时间: 2015-6-24 21:14
帅帅loyal 发表于 2015-6-24 21:08
show方法只是单纯的赋值,调用show方法的时候,show入栈,把所有的数值赋值给了s1和s2,此时s1和s2是赋值以 ...

好吧,还是不太懂。算了,我试着画个内存图看看吧。谢谢你啊
作者: keto    时间: 2015-6-24 21:16
2楼的解释很明白。。。
作者: 帅帅loyal    时间: 2015-6-24 21:17
fyg408224345 发表于 2015-6-24 21:14
好吧,还是不太懂。算了,我试着画个内存图看看吧。谢谢你啊

我说的有点简单了,,,你去Java基础技术交流版块里边找一个叫“学而时习之不亦乐乎”的帖子,里边说的很详细,相信你看完就懂了
作者: bingyu    时间: 2015-6-24 21:19
2 楼讲的很明白:victory:
作者: fyg408224345    时间: 2015-6-24 21:26
帅帅loyal 发表于 2015-6-24 21:17
我说的有点简单了,,,你去Java基础技术交流版块里边找一个叫“学而时习之不亦乐乎”的帖子,里边说的很 ...

嗯嗯  谢谢你哦
作者: 十五号的人生    时间: 2015-6-24 21:37
因为s1和s2是变量,变量运算时会重新开辟空间,而常量就不同了
常量相加会直接累加,然后在常量池里面去找有没有,如果有的话就是常量池的值。
我是这样理解的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2