黑马程序员技术交流社区

标题: 各位大神看一下,这个小程序,编译能通过,但是运行的时候会出现空指针异常,为什么? [打印本页]

作者: 尘埃123    时间: 2015-5-3 09:23
标题: 各位大神看一下,这个小程序,编译能通过,但是运行的时候会出现空指针异常,为什么?
import java.util.*;
class a1
{
        public static void main(String[] args)
        {
                StringBuilder sb=new StringBuilder();
                sb=null;
                HashMap<Integer,String> hm=new HashMap<Integer,String>();
                hm.put(1,"一");
                hm.put(2,"二");
                hm.put(3,"三");
                hm.put(4,"四");
                hm.put(5,"五");
                hm.put(6,"六");
                hm.put(7,"七");
                hm.put(8,"八");
                hm.put(9,"九");
                hm.put(0,"零");
                Set<Integer> set=hm.keySet();
                Iterator<Integer> it=set.iterator();
                while (it.hasNext())
                {
                        sb.append(String.valueOf(hm.get(it.next())));
                }
                System.out.println(sb);
        }
}
作者: 小甲鱼    时间: 2015-5-3 09:29
你把sb指向了null   StringBuilder是在原有的基础上添加,  所以后面的添加无意义
作者: ZSMAN    时间: 2015-5-3 09:30
main函数第2行:sb=null,为什么这样写?
作者: 尘埃123    时间: 2015-5-3 09:31
引用类型不应该初始化吗
作者: 鸡脑壳    时间: 2015-5-3 09:31
StringBuilder sb=new StringBuilder();
                sb=null;
这两句运行之后
sb也就不再是StringBuilder 的应用类型了吧
它已经与对象没关系了
作者: ZSMAN    时间: 2015-5-3 09:35
尘埃123 发表于 2015-5-3 09:31
引用类型不应该初始化吗

  初始化这样写:         
    StringBuilder sb=null;
sb=new StringBuilder();
作者: 尘埃123    时间: 2015-5-3 09:40
对对,受教了,谢了各位
作者: 邓熊财    时间: 2015-5-3 10:24
           sb=null;都指向空了你还想要什么???
作者: yihuihua    时间: 2015-5-3 11:11
定义了一个无效的缓冲区
作者: 1017161726    时间: 2015-5-3 11:13
如果把sb=null那行去掉,就可以了。StringBuilder方法在API中是被final修饰的。不可以被二次赋值。但是对于sb对象,还是可以添加值的。但你初始化的时候,已经把final的sb赋了空值,那他一辈子就都是空了。
作者: 尘埃123    时间: 2015-5-3 12:25
1017161726 发表于 2015-5-3 11:13
如果把sb=null那行去掉,就可以了。StringBuilder方法在API中是被final修饰的。不可以被二次赋值。但是对于 ...

厉害 ,学习了。。。。
作者: IDhmpj    时间: 2015-5-3 19:48
sb = null;sb不再指向任何对象,这时候再调用方法的话就会抛出NullPointerException
作者: fanxia_2007    时间: 2015-5-3 20:02
先是定义了一个新的缓冲区,接着又指向null,这个缓冲区就初始化为null了,所以会出现空指针异常。
作者: Demomiku    时间: 2015-5-3 20:22
sb = null去掉就可以了
作者: 晓声    时间: 2015-5-3 20:32
学习了。。现在还没学到呢




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