null在Java中带来的麻烦
我相信所有的Java程序猿一定都遇到过NullPointerException
,空指针在Java程序中是最常见的,也是最烦人的;它让我们很多程序猿产生了根深蒂固的感觉,所有可能产生空指针的地方都的加上if-else
检查,但是这带给我们很多麻烦
- Java本身是强类型的,但是null破坏了这个规则,它可以被赋值给任何对象
- Java的设计是让程序猿对指针无感知,但是null指针是个例外
- 它会是代码变得很臃肿,到处都充斥着
if-else
的空检查,甚至是多层嵌套,代码可读性下降 - null本身毫无意义,表示不了
无
前两点不需要特别的说明,后两点举个例子来说明一下:
假如一个人拥有一个手机,每个手机都有生成厂商,每个厂商都会有个名字,用类表示的话:
public class Person {
private Phone phone;
public Phone getPhone() {
return phone;
}
}
public class Phone {
private Producer producer;
public Producer getProducer() {
return producer;
}
}
public class Producer {
private String name;
public String getName() {
return name;
}
}
在这个例子中,假如我们需要取到手机生成厂商的名字
public String getPhoneProducerName(Person person) {
return person.getPhone().getProducer().getName();
}
由于不一定每个人都会有一个手机,所有在调用getProducer()
时可能会出现NullPointerException
。
一门设计语言本来就是来描述世界的,在这个事例中有的人有手机,有的人也可能没有手机,所以在调用person.getPhone()
返回的值就应该包含有和无这两种情况,现在通过返回null<