关于java的StringBuffer的tosting方法的一点疑惑,
发布网友
发布时间:2022-04-23 21:30
我来回答
共4个回答
热心网友
时间:2023-09-30 14:43
return的用法没弄清楚吧……
在myReaderLine方法里面,只要return了
就会直接退出myReaderLine方法,下面的语句都不在执行
StringBuilder的缓冲区是不会随便清空的
这个和一般的对象一样,当系统不再使用的时候,Java虚拟机会自动的清理掉
这里的话,因为StringBuilder对象只在myReaderLine方法里面使用
使用return退出方法后,StringBuilder对象一定时间内会被回收
但是,sb.toString()返回的字符串常量还是存在的
热心网友
时间:2023-09-30 14:43
调用StringBuilder.toString()方法,只是将你用append()方法追加的东西组装到一起,以字符串的形式返回,StringBuilder本身当然不会清空。
if(sb.length()!=0)
return new String("123");//如果没有清空,数据还在的话,我返回123,应该控制台整个屏幕都是123的呀...... ,,就是这个问题让我纠结了,,由于自学,,,无人指教,特求前辈指点,万谢.
不会执行到这里。因为你的myReaderLine()方法就是读取一行然后返回。当最后一行都读取完毕后。又调用这个方法,方法中StringBuilder sb = new StringBuilder()。此时因为文件已经读完了,所以不会执行下面这段代码。
while((ch=r.read())!=-1) {
if(ch=='\r')
continue;
if(ch=='\n')//if 和else是一起的,如果等于n了,就打印出去,然后,如果不等于空,则添加.
return sb.toString();//把缓冲区里面的数据返回出去了,,这个时候是不是缓冲区StringBuilder就是清空了???
else
sb.append((char)ch);
}//循环结束
那么你的StringBuilder是空的,即length = 0,所以你判断if (sb.length() !=0){return new String("123"}就没法执行了。
明白了不 ?
热心网友
时间:2023-09-30 14:44
return sb.toString(); 是返回缓冲区的数据,并不会清空缓冲区
return new String("123"); 只有当改行没有数据或者文件已经读完的情况下才会返回123
热心网友
时间:2023-09-30 14:44
问这样的问题去CSDN