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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© biebie 中级黑马   /  2014-12-11 21:49  /  1298 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

6 个回复

倒序浏览
y=x;
只是对临时变量y做了改变,没有对b做什么。所以b的值没有改变。
回复 使用道具 举报
我觉得是 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

点评

这个例子很赞 谢谢  发表于 2014-12-11 23:11

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报 1 0
史云龙 发表于 2014-12-11 22:25
y=x;
只是对临时变量y做了改变,没有对b做什么。所以b的值没有改变。

  x.append(y) 就不是对临时变量做改变,而是对a做了实际改变了,对吗?
为什么同样是在函数中,y=x却只是对临时变量做改变了,
不好意思我有点糊涂
回复 使用道具 举报
不号意思,做你的题目时,我也犯晕了会
镇定了一下,手抖 选了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(),等号运算符 还没有这么大的作用,要想改变 容器中的内容,只能通过容器的方法  改变容器。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
奋斗的蜗牛ksd 发表于 2014-12-11 23:02
不号意思,做你的题目时,我也犯晕了会
镇定了一下,手抖 选了D,

非常详细!感谢!!也谢谢上面那位头像吓人的大哥
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马