黑马程序员技术交流社区

标题: stringbuffer的一道题 求解 [打印本页]

作者: biebie    时间: 2014-12-11 21:49
标题: stringbuffer的一道题 求解
class J_StringBuffer{C
            public static void main(String args[]){
                       StringBuffer a = new StringBuffer("A");
                StringBuffer b = new StringBuffer("B");

                mb_operate(a, b);
                System.out.println(a + "." + b);
            } // End of method: main

                    static void mb_operate(StringBuffer x, StringBuffer y){
                       x.append(y);
                        y=x;
                    } // End of method: mb_operate
} // End of class: J_StringBuffer
上面程序的输出是什么?      
A、A.B     
B、A.A   
C、AB.AB   
D、AB.B


答案为什么是D呢?我觉得是c
作者: 史云龙    时间: 2014-12-11 22:25
y=x;
只是对临时变量y做了改变,没有对b做什么。所以b的值没有改变。
作者: wangcongwu    时间: 2014-12-11 22:28
我觉得是 append 方法把内存中的x 后面接上了y 然后再返回给硬盘,而  等号 = 是不能把内存中的赋值返回给硬盘,而在主方法中 等号是可以赋值给硬盘的。
package heimaBlogQuesions;

class StringBufferDemo{
    public static void main(String args[]){
               StringBuffer a = new StringBuffer("A");
        StringBuffer b = new StringBuffer("B");

        mb_operate(a, b);
        b= a ;
        System.out.println("x after mb:"+a);
        System.out.println("y after mb: "+b);

        System.out.println(a + "." + b);
    } // End of method: main

            static void mb_operate(StringBuffer x, StringBuffer y){
             x.append(y);
             System.out.println("x in mb:"+x);
               
            
              y=x;
                System.out.println("y in mb: "+y);

           }
}
输出结果是:
x in mb:AB
y in mb: AB
x after mb:AB
y after mb: AB
AB.AB
只有这样才能输出AB点AB
作者: biebie    时间: 2014-12-11 22:37
史云龙 发表于 2014-12-11 22:25
y=x;
只是对临时变量y做了改变,没有对b做什么。所以b的值没有改变。

  x.append(y) 就不是对临时变量做改变,而是对a做了实际改变了,对吗?
为什么同样是在函数中,y=x却只是对临时变量做改变了,
不好意思我有点糊涂
作者: 奋斗的蜗牛ksd    时间: 2014-12-11 23:02
不号意思,做你的题目时,我也犯晕了会
镇定了一下,手抖 选了D,

这么给解释吧:
关键是这一句话    System.out.println(a + "." + b);,输出的到底是什么,你肯定知道 输出额是集合内容,如果 集合不变,那么输出结果是   A.B

第二步研究一下mb_operate():
                         x.append(y);//这一步:append 容器 StringBuffer的方法,所以 x容器中的内容改变了,为A.B
                         y=x;//这是什么? 先研究等号运算符,=  是把右边内容传递到左边
//左边内容是什么?  x,x只是 容器 b的引用,引用单纯来说 只是一个 地址,,y=x只是改变了地址,但是容器b的内容没有改变,所以输出的时候,是容器b的内容是B。

你额误解是:y=x这句话的意思是 把  容器a的内容(A.B) 传递给容器B(),等号运算符 还没有这么大的作用,要想改变 容器中的内容,只能通过容器的方法  改变容器。
作者: biebie    时间: 2014-12-11 23:08
奋斗的蜗牛ksd 发表于 2014-12-11 23:02
不号意思,做你的题目时,我也犯晕了会
镇定了一下,手抖 选了D,

非常详细!感谢!!也谢谢上面那位头像吓人的大哥




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