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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© -律- 中级黑马   /  2014-12-20 00:09  /  1224 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 -律- 于 2014-12-20 00:18 编辑

下面程序的运行结果是(     )
public static void main(String[] args){
StringBuffer sb = new StringBuffer();//实例化一个叫sb的对象;
sb.append("qq").append("ww");//添加元素"qq"以及"ww"
show(sb,"ss");//调用show方法
System.out.println(sb.length());//打印sb长度
        }
static void show(StringBuffer sb,String str){
          sb.append(str);//show中封装一个给sb添加元素的方法
        }
a) 4
b) 2
c) 6
d) 0
我知道运行结果是6,但是比如show方法的写法和调用,弄的我思维混乱了,大家能把自己第一眼看到的思维,写个备注出来么

我只是知其然,不知其所以然,大神勿喷!

评分

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

查看全部评分

17 个回复

倒序浏览
我个人最大的疑问就是:

show(sb,"ss");为什么可以这样写

因为

static void show(StringBuffer sb,String str){
          sb.append(str);
那么show( );括号中不是应该只填写一个字符串么,还要写sb(sb,"ss")
回复 使用道具 举报
好吧,我想明白了,我有点死脑筋
回复 使用道具 举报
show函数 是你自己定义的,括号里面表示自定义的参数列表,你如果在show方法的参数列表里面写了
StringBuffer sb  表示这个函数可以接收一个容器
参数列表写String str  表示这个函数可以接收字符串
两个一起写,表示两个都接收

在这个show方法中,可以操作 这个容器 和字符串,但是操作的变量是固定的,即容器 就是sb,字符串就str

点评

我试了一下,str可以改,StringBuffer sb也是一个接受的容器,我new了一个sb2,也能用show方法,我之前一直以为sb就只能是StringBuffer的sb,只有str可以改,错误,受教...  发表于 2014-12-20 00:30
回复 使用道具 举报
奋斗的蜗牛ksd 发表于 2014-12-20 00:19
show函数 是你自己定义的,括号里面表示自定义的参数列表,你如果在show方法的参数列表里面写了
StringBuff ...

原来StringBuffer sb是一个容器,sb的值不能像str一样改变么,受教了,我上去试一试
回复 使用道具 举报
对函数的理解,得靠自己抽象去对比的学,

数学中的函数, 你给它一些变量,它会对变量按照函数的规则操作,比如圆的方程之类

java中的函数,函数列表规定了这个函数可以操作什么类型的数据,以及该类型数据的名称

返回值类型其实没什么用,你可以忘记它

其他的需要你自己思考咯,今天我也刚捉摸过这个问题。

评分

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

查看全部评分

回复 使用道具 举报
-律- 中级黑马 2014-12-20 00:31:59
7#
4楼说的很简单明了,3Q
回复 使用道具 举报
你对下面两个show可能有点小误会
show(sb,"ss");//我叫第一个show

static void show(StringBuffer sb,String str){ //我叫第二个show

          sb.append(str);//show中封装一个给sb添加元素的方法

        }

第一个show 的作用是传递,传递在main方法中定义的容器 和字符串
第二show的作用 是进行接收和操作,接收的参数列表类型,在第一个show定义的时候就已经确定即必须是
(StringBuffer 变量名,String 变量名),这两个变量名是可以随便起的,用来接收第一个show传递过来的数据内容
在第二个show方法中,所有操作的变量,都是在第二个show参数列表中你自己定义的变量名。

我觉得我说的够详细了,其他自己测试测试就可以得出结果了,该一该代码,就可以验证自己的想法!加油!
回复 使用道具 举报

  1. public class Test222 {

  2.         public static void main(String[] args){

  3.                 StringBuffer sb = new StringBuffer();//实例化一个叫sb的对象;

  4.                 System.out.println(sb.length());;
  5.                
  6.                 sb.append("qq").append("ww");//添加元素"qq"以及"ww"
  7.                 System.out.println(sb.length());
  8.                
  9.                 show(sb,"ss");//调用show方法,执行show方法,完成show方法中的功能

  10.                 System.out.println(sb.length());//打印sb长度

  11.                         }

  12.                 static void show(StringBuffer sb,String str){

  13.                           sb.append(str);//show中封装一个给sb添加元素的方法

  14.                         }

  15. }
复制代码


上面是验证一下执行顺序,结果一次是0 4 6,即,数组确长度实是在执行show之后变成6的
回复 使用道具 举报
-律- 中级黑马 2014-12-20 01:03:26
10#
奋斗的蜗牛ksd 发表于 2014-12-20 00:37
上面是验证一下执行顺序,结果一次是0 4 6,即,数组确长度实是在执行show之后变成6的 ...

show1 填入变量名 ;
show2 ( 执行方式 ) ;
1,2是一个整体,完整走下来,结果出现了

你这种二分法式的理解方式,我喜欢
回复 使用道具 举报
我第一眼 还以为是 GUI里的show ,,呵呵  傻了
回复 使用道具 举报
-律- 中级黑马 2014-12-20 01:34:58
12#
郭文飞 发表于 2014-12-20 01:19
我第一眼 还以为是 GUI里的show ,,呵呵  傻了

GUI图像界面编程啊,咱还没学到那呢,得过几天
回复 使用道具 举报
-律- 发表于 2014-12-20 01:34
GUI图像界面编程啊,咱还没学到那呢,得过几天

不过你学不到了 哈哈  因为那个方法已经过时了  上面会有一个删除线的
回复 使用道具 举报
huoxy 中级黑马 2014-12-20 14:33:49
14#
建议楼主起函数名时能体现一下功能。别人一看show以为是要打印或显示功能,你定义的却是添加功能,有点混乱。
回复 使用道具 举报
-律- 发表于 2014-12-20 01:03
show1 填入变量名 ;
show2 ( 执行方式 ) ;
1,2是一个整体,完整走下来,结果出现了

别激动,都是男人。
回复 使用道具 举报
-律- 中级黑马 2014-12-22 21:39:03
16#

黑马币难混,虽然论坛这种互动方式挺好的
回复 使用道具 举报
问吧,问吧 ,赶紧问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马