A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fyg408224345 中级黑马   /  2015-6-24 21:04  /  630 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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   ?

7 个回复

倒序浏览
show方法只是单纯的赋值,调用show方法的时候,show入栈,把所有的数值赋值给了s1和s2,此时s1和s2是赋值以后的值,当show方法结束,show出栈,赋值什么的也就都没有了,所以打印的时候就打印的还是原来的s1和s2的值
回复 使用道具 举报
帅帅loyal 发表于 2015-6-24 21:08
show方法只是单纯的赋值,调用show方法的时候,show入栈,把所有的数值赋值给了s1和s2,此时s1和s2是赋值以 ...

好吧,还是不太懂。算了,我试着画个内存图看看吧。谢谢你啊
回复 使用道具 举报
2楼的解释很明白。。。
回复 使用道具 举报
fyg408224345 发表于 2015-6-24 21:14
好吧,还是不太懂。算了,我试着画个内存图看看吧。谢谢你啊

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

嗯嗯  谢谢你哦
回复 使用道具 举报
因为s1和s2是变量,变量运算时会重新开辟空间,而常量就不同了
常量相加会直接累加,然后在常量池里面去找有没有,如果有的话就是常量池的值。
我是这样理解的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马