黑马程序员技术交流社区
标题:
求助:
[打印本页]
作者:
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