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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

beyondjia 发表于 2014-8-11 16:09
看完之后觉得。。。我还是要继续学习。。。

好好学。。一起努力吧 。。。。。
回复 使用道具 举报
我表示不是很懂
回复 使用道具 举报
第一个
S1-------hellojava
S2-------hellojava
S2-------hellojavahellojava
S1-------hellojavahellojava
=================
hellojavahellojava
java

第二个
S1---------hellojava
S2---------java
S2---------java
S1---------java
================
hellojava
helloJava

他们传过去的全是引用,所以会改变值,而且引用在改变
回复 使用道具 举报

不是很懂。。就仔细看看。。。
回复 使用道具 举报
第一个
S1-------hellojava
S2-------hellojava
S2-------hellojavahellojava
S1-------hellojavahellojava
=================
hellojavahellojava
java

第二个
S1---------hellojava
S2---------java
S2---------javajava
S1---------javajava
================
hellojava
javaJava

他们传过去的全是引用,所以会改变值,而且引用在改变
回复 使用道具 举报
烟海 发表于 2014-8-11 17:09
不是很懂。。就仔细看看。。。

恩恩        
回复 使用道具 举报
为啥两个都变了啊
回复 使用道具 举报
看看答案
回复 使用道具 举报
J.twt 中级黑马 2014-8-11 18:15:17
69#
怎么感觉简单?
回复 使用道具 举报
:victory::victory:
回复 使用道具 举报
本帖最后由 怀念黑海岸 于 2014-8-11 19:03 编辑

额,我想知道问题是什么????是求打印结果吗??
回复 使用道具 举报
怀念黑海岸 发表于 2014-8-11 18:59
额,我想知道问题是什么????是求打印结果吗??

是的。。看看打印结果和你预想的是不是一样??
回复 使用道具 举报
烟海 发表于 2014-8-11 19:04
是的。。看看打印结果和你预想的是不是一样??

恩,和哦我想的结果是一样的。。呵呵,这儿我特别深究过的的,所以不是特别难。
回复 使用道具 举报
怀念黑海岸 发表于 2014-8-11 19:12
恩,和哦我想的结果是一样的。。呵呵,这儿我特别深究过的的,所以不是特别难。 ...

哦。。那挺厉害的了。。
回复 使用道具 举报
烟海 发表于 2014-8-11 15:49
因为是StringBuffer,在常量池中。。。。把s1的值赋给s2, 而且String类型的值,一旦被初始化,就不能被 ...

好像有点明白了,其实主要原因还是因为单独封装了show方法的原因吧,因为show方法会在栈内存另外生成StringBuffer s1和StringBuffer s2(地址值和main一样的?),并且执行到s2=s1的时候只是show方法里的s2的地址值指向了s1,主函数里的s2指向还是没变。
如果把show主体拖出来到主函数上面去,结果s1和s2都是hellojavahellojava。

还有代码里的容器添加动作是次要的,甚至跟StringBuffer也没什么关系吧?可以简化代码如下,并且不影响楼主要表达的问题:
  1. public class Test
  2.         {
  3. public static void main(String[] args)
  4.                         {
  5.                 StringBuffer s1 = new StringBuffer("hello");
  6.                 StringBuffer s2 = new StringBuffer("java");
  7.                
  8.                                 show(s1,s2);
  9.                 System.out.println("=================");
  10.                
  11.                                 System.out.println(s1);
  12.                 System.out.println(s2);        
  13.                         }
  14.         public static void show(StringBuffer s1 ,StringBuffer s2)
  15.                         {                       
  16.                               
  17.                 s2 = s1;
  18.                        
  19.                 System.out.println("S2---"+s2);
  20.                 System.out.println("S1---"+s1);
  21.                
  22.                         }
  23.         }
复制代码





回复 使用道具 举报
这括号咋都乱了。。
回复 使用道具 举报
:o 有点儿意思
回复 使用道具 举报
学习了,加深下这块的理解。
回复 使用道具 举报
kakasa 发表于 2014-8-11 19:59
好像有点明白了,其实主要原因还是因为单独封装了show方法的原因吧,因为show方法会在栈内存另外生成Stri ...

跟StringBuffer 和append都有关系的。。。。
仔细看看吧 。。。
回复 使用道具 举报
看答案,呵呵
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马