空指针问题和null
1、null是Java中的关键字,像public、static、final。它是⼤⼩写敏感的,你不能将null写成Null或NULL,编译器将不能识别它们然后报错。
2、就像每种原始类型都有默认值⼀样,如int默认值为0,boolean的默认值为false,null是任何引⽤类型的默认值,不严格的说是所有object 类型的默认值。就像你创建了⼀个布尔类型的变量,它将false作为⾃⼰的默认值,Java中的任何引⽤变量都将null作为默认值。这对所有变量都是适⽤的,如成员变量、局部变量、实例变量、静态变量(但当你使⽤⼀个没有初始化的局部变量,编译器会警告你)。为了证明这个事实,你可以通过创建⼀个变量然后打印它的值来观察这个引⽤变量。
3、null既不是对象也不是⼀种类型,它仅是⼀种特殊的值,你可以将其赋予任何引⽤类型,你也可以将null转化成任何类型。
4、null可以赋值给引⽤变量,你不能将null赋给基本类型变量,例如int、double、float、boolean。如果你那样做了,编译器将会报错。
5、任何含有null值的包装类在Java拆箱⽣成基本数据类型时候都会抛出⼀个空指针异常。(例如Integer拆箱成int时)
6、如果使⽤了带有null值的引⽤类型变量,instanceof操作将会返回false。(instanceof:⽤来在运⾏时指出对象是否是特定类的⼀个实例,例如:Integer num = null,那么,调⽤ num instanceof Integer时会返回false)
7、不能调⽤⾮静态⽅法来使⽤⼀个值为null的引⽤类型变量,它将会抛出空指针异常;可以使⽤静态⽅法来使⽤⼀个值为null的引⽤类型变量,因为静态⽅法使⽤静态绑定,不会抛出空指针异常。
8、你可以使⽤==或者!=操作来⽐较null值,但是不能使⽤其他算法或者逻辑操作,例如⼩于或者⼤于。跟SQL不⼀样,在Java中null==null 将返回true。
注释(引⽤类型是什么这⾥讲解下 example: People是⼀个类 People duyitong;//duyitong是⼀个引⽤类型,这⾥duyitong是null,当下⼀句话执⾏后,他就类似于⼀个指针指向堆中的⼀个People对象
duyitong=new People(); )
举例
假设我们现在有⼀个类,例如String,对于如下代码:
String str = null;
if (str.equals("Hello World!")){
System.out.println("Yes");
}else {
System.out.println("No");
}
就会抛出空指针异常,但是,如果我们把第⼆⾏的条件判断改为:
if ("Hello World!".equals(str))
就不会抛出空指针异常,因为String的equals⽅法不是Static⽅法
反思
equals不等于为了避免内存溢出,我们在⽆需类外调⽤的⽅法前,⼀般不加static关键字(因为静态⽅法会常驻内存,其⽣存周期与整个项⽬的⽣存周期是⼀致的)所以,我们应该在为变量赋初值的时候,尽量不要使⽤null来赋初值,如果⼀定是null作为初值的情况,那么在进⾏操作时,⼀定要先 Assert.isNull ⼀下,尽量
避免对null进⾏操作。回到equals⽅法上,如果⼀个初值可能为空的对象实例,调⽤equals⽅法时,⼀定要遵循 “常量”.equals(变量) 或者后输⼊的.equals(之前的)。这样就可以尽量避免空指针错误,平时多注意,养成习惯,防⽌⽇后埋下隐患。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论