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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戴振良 黑马帝   /  2012-3-30 20:41  /  3177 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Test
  2. {       
  3.         public static void main(String[] args) throws Exception
  4.         {       
  5.                 String name="dai";
  6.                 StringBuffer sb = new StringBuffer(name);
  7.                 while(name.length()<8) {
  8.                         sb =sb.append('*');
  9.                 }
  10.                 System.out.println(sb.toString());
  11.         }
  12. }
复制代码
运行时出现如下异常:


8 个回复

倒序浏览
内存溢出,你写的是while语句,里面的表达式一直为true,会一直执行下去,就会造成内存溢出了
回复 使用道具 举报
因为你的while的循环条件是name.length()<8,而不是sb的长度<8,由于字符串的长度定义后是不会改变的,所以name的长度永远是4,循环条件永远为真,所以会内存溢出,
应该改成sb的长度就对了
回复 使用道具 举报
while(name.length()<8) 该成while(sb.ltngth()<8)
因为你的name.length()一直都是3,所以你的程序是死循环
回复 使用道具 举报
注意while语句的条件   name.length()永远小于8!!!!!!!!!!!!!!!!

应改为::::::
public class Test

{        
        public static void main(String[] args) throws Exception

        {        
                String name="dai";

                StringBuffer sb = new StringBuffer(name);

                while(sb.length()<8) {---------------////原代码中name恒等于“dai”,因此长度始终为3

                        sb =sb.append('*');//stringbuffer  的方法append(char c) 将 char 参数的字符串表示形式追加到此序列。

                }

                System.out.println(sb.toString());

        }

}
回复 使用道具 举报
哦,明白了{:soso__8961432591078930798_3:}
回复 使用道具 举报
你应该在while循环里写(sb.lengh()<8),而不是name.length(),因为name是一个string类型的变量,他的length不会改变,所以你写name.leng()<8时,就会无限循环,而出现了内存溢出异常。
回复 使用道具 举报
异常:内存溢出
做法 sb =sb.append('*'); 改成sb.append('*');
回复 使用道具 举报
sb在append但是字符串String确没有增加,初始化时把String name的内容传进去,但是操作的还是sb,while语句里面的判断表达式一直为true,所以一直增加,导致内存溢出。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马