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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© goldenking56 初级黑马   /  2012-3-6 16:57  /  1654 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 goldenking56 于 2012-3-6 17:07 编辑

麻烦各位高人帮我看看这段代码那哪里错了,一直编译不通过?
public static String method_reverse(String str)
        {
                for(int i=str.length()-1;i>=0;i--)
                {
                        StringBuffer s = new StringBuffer();
                        s = s.append(str.charAt(i));
                }
                        return s.toString();
        }

刚听QQ群里的朋友说,把StringBuffer放到for循环外面定义就可以了,我试了下,确实可以,为什么呀?

7 个回复

倒序浏览
在for循环里面,StringBuffer s = new StringBuffer();产生的s作用范围在for循环里面,
在for循环外,用s.*是非法的,因为for循环之外没有定义这个对象!
回复 使用道具 举报
你吧StringBuffer放在了for循环里面,他就成为了一个局部变量!所以你想在for外面访问s,那是不可能的!
回复 使用道具 举报
这涉及到对象引用作用域的问题,你将s的引用对象放在for循环里面,那么它的作用也就在for循环结束时随之结束
回复 使用道具 举报
在for循环里面定义的s  但是你在for循环外面却又用到s.*了 当然报错啦 ~
回复 使用道具 举报
你没用弄清楚变量的作用域的问题!编写的时候要考虑变量的作用范围!~
回复 使用道具 举报
还是变量的问题没弄明白、、变量只作用与{}里面。。。。。
{
                        StringBuffer s = new StringBuffer();
                        s = s.append(str.charAt(i));
                }//s出了{}就被释放了
                        return s.toString();//
回复 使用道具 举报
StringBuffer放在for循环里面时,每一次循环都实例化一次,都开辟一片内存,s指向内存地址,下一次循环时,s又指向新的内存地址,原来指向的地址断开了,因此不能进行连接;放在for循环外面的时候,StringBuffer只实例化一次,s始终指向同一地址,因此可以进行连接
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马