黑马程序员技术交流社区

标题: 银行业务调度系统中的一个小疑问 [打印本页]

作者: 刘芮铭    时间: 2012-8-29 20:11
标题: 银行业务调度系统中的一个小疑问
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;
  }
}
}

作者: 赵云柯    时间: 2012-8-29 20:20
int是基本数据类型,如果方法返回null的话,无法将null转换成int类型,会导致返回类型不一致
Integer是引用数据类型,将Integer类型的变量赋值为null是不会产生语法错误的,所以要将方法的返回类型设成Integer类型。
作者: 曹操    时间: 2012-8-29 20:49
解决问题这个问题 可以首先从详细了解这个异常入手
通过api可知

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

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

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






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