黑马程序员技术交流社区

标题: 求助: [打印本页]

作者: goldenking56    时间: 2012-3-6 16:57
标题: 求助:
本帖最后由 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循环外面定义就可以了,我试了下,确实可以,为什么呀?
作者: 倪鹏博    时间: 2012-3-6 17:14
在for循环里面,StringBuffer s = new StringBuffer();产生的s作用范围在for循环里面,
在for循环外,用s.*是非法的,因为for循环之外没有定义这个对象!
作者: 王杰    时间: 2012-3-6 17:19
你吧StringBuffer放在了for循环里面,他就成为了一个局部变量!所以你想在for外面访问s,那是不可能的!
作者: 李涛涛    时间: 2012-3-6 17:21
这涉及到对象引用作用域的问题,你将s的引用对象放在for循环里面,那么它的作用也就在for循环结束时随之结束
作者: Destiny    时间: 2012-3-6 17:43
在for循环里面定义的s  但是你在for循环外面却又用到s.*了 当然报错啦 ~
作者: 黑马肖凯骏    时间: 2012-3-6 17:50
你没用弄清楚变量的作用域的问题!编写的时候要考虑变量的作用范围!~
作者: 陈斌    时间: 2012-3-6 18:18
还是变量的问题没弄明白、、变量只作用与{}里面。。。。。
{
                        StringBuffer s = new StringBuffer();
                        s = s.append(str.charAt(i));
                }//s出了{}就被释放了
                        return s.toString();//
作者: 陈汉帆    时间: 2012-3-6 18:27
StringBuffer放在for循环里面时,每一次循环都实例化一次,都开辟一片内存,s指向内存地址,下一次循环时,s又指向新的内存地址,原来指向的地址断开了,因此不能进行连接;放在for循环外面的时候,StringBuffer只实例化一次,s始终指向同一地址,因此可以进行连接




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