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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘芮铭 中级黑马   /  2012-8-29 20:11  /  2007 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class NumberManager {
private int lastNumber = 0;
private List queueNumbers = new ArrayList();

public synchronized Integer generateNewNumber(){
  queueNumbers.add(++lastNumber);
  return lastNumber;
}

public synchronized Integer fetchNumber(){   //本来红色部分写的是int,但张老师说,如果没有客户排队的话,会产生空指针异常,那为什么换成Integer后可以解决?

  if(queueNumbers.size()>0){
   return (Integer)queueNumbers.remove(0);
  }else{
   return null;
  }
}
}

2 个回复

正序浏览
解决问题这个问题 可以首先从详细了解这个异常入手
通过api可知

当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括:

调用 null 对象的实例方法。
访问或修改 null 对象的字段。
将 null 作为一个数组,获得其长度。
将 null 作为一个数组,访问或修改其时间片。
将 null 作为 Throwable 值抛出。
应用程序应该抛出该类的实例,指示其他对 null 对象的非法使用。

而楼主代码正好是在需要对象的地方 使用null  正如楼上的大虾所说“Integer是引用数据类型,将Integer类型的变量赋值为null是不会产生语法错误的”

回复 使用道具 举报
int是基本数据类型,如果方法返回null的话,无法将null转换成int类型,会导致返回类型不一致
Integer是引用数据类型,将Integer类型的变量赋值为null是不会产生语法错误的,所以要将方法的返回类型设成Integer类型。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马