java对象为null啥意思,Java中的空对象(null)是怎么回事?
java中的null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型。
null关键字详解
1.首先,null是一个关键字,和public、static、final一样。它是区分大小写的,不能把NULL写成null或者Null,编译器不会识别它们并报错。
2.就像每个基本类型都有默认值一样,比如int的默认值是0,boolean的默认值是false,null是任何引用类型的默认值。就像你创建一个布尔类型的变量,以false为默认值,Java中任何引用变量都以null为默认值。这适用于所有变量。
比如成员变量、局部变量、实例变量、静态变量(但是当你使用未初始化的局部变量时,编译器会警告你)。为了证明这个事实,您可以通过创建一个变量然后打印它的值来观察这个引用变量。
免费视频教程推荐:java视频
3.我们想澄清一些误解。null既不是对象,也不是类型,而是一个特殊的值。可以将其赋给任何引用类型,也可以将null转换为任何类型。请看下面的代码:
String str=null
整数i=null
Double d=null
String myStr=(String)null;
Integer myI=(Integer)null;
Double myD=(Double)null;可以看到,在编译时和运行时将null强制转换为任何引用类型都是可行的,并且在运行时不会抛出null指针异常。
4.null可以赋给引用变量,但是不能赋给基本类型变量,比如int,double,float,boolean。编译器将报告一个错误。
如你所见,当你直接将null赋给基本类型时,会出现编译错误。但是,如果您将null赋给包装类对象,然后将object赋给它们各自的基本类型,编译器不会报告它,但是您会在运行时遇到null指针异常。这是由Java中的自动拆箱造成的。
5.当Java解包生成基本数据类型时,任何带有空值的包装类都会抛出空指针异常。一些程序员错误地认为自动装箱会将null转换为其基本类型的默认值,例如,将int转换为0,将Boolean转换为false,但这是不正确的,如下所示:
Integer iAmNull=null
int i=iAmNull//记住——没有编译错误但是当你运行上面的代码片段的时候,你会看到主线程在控制台上抛出一个空指针异常。当使用HashMap和整数键值时,会出现许多这样的错误。当您运行下面的代码时,将会出现一个错误。
公共类Test3 {
公共静态void main(String args[])引发InterruptedException {
map number and count=new HashMap();
int[] numbers={3,5,7,9,11,13,17,19,2,3,5,33,12,5 };
for(int i : numbers){
int count=(int)numberandcount . get(I);//NullPointerException
numberAndCount.put(i,count);
}
}
}
包装测试;导入Java . util . hashmap;
导入Java . util . map;
公共类Test3 {
公共静态void main(String args[])引发InterruptedException {
map number and count=new HashMap();
Integer[]数字={3,5,7,9,11,13,17,19,2,3,5,33,12,5 };
for(整数I:数字){
Integer count=(Integer)numberandcount . get(I);
numberAndCount.put(i,count);//NullPointerException
}
}
}这段代码看起来非常简单,没有错误。您所要做的就是找出一个数字在数组中出现了多少次,这是在Java数组中查找重复项的典型技术。首先,开发人员获取之前的值,然后加1,最后将值放回地图中。
程序员可能会认为,调用put方法时,第一种方式是转换int null指针,验证之前说的内容。第二种方式,自动打包会自行处理解包问题,但是忘记了当一个数没有计数值时,get方法返回的是null而不是0,因为Integer的默认值是null而不是0。当空值被传递给int变量时,自动装箱将返回空指针异常。
6.如果使用具有空值的引用类型变量,instanceof操作将返回false。
Integer iAmNull=null
if(iAmNull instanceof Integer){
System.out.println(iAmNull是Integer的实例);
}否则{
System.out.println(iAmNull不是Integer的实例);
}这是instanceof操作的一个重要特性,这使得它在检查类型转换时非常有用。
7.您可能知道不能调用非静态方法来使用带有空值的引用类型变量。它会抛出一个空指针异常,但是你可能不知道你可以用一个静态方法来使用一个空值的引用类型变量。因为静态方法使用静态绑定,所以不会引发空指针异常。下面是一个例子:
公共类测试{
公共静态void main(String args[]){
测试myObject=null
my object . iamstaticmethod();
my object . iamonstaticmethod();
}
私有静态void iAmStaticMethod(){
System.out.println(我是静态方法,可以通过空引用调用);
}
private void iamonstaticmethod(){
System.out.println(我是非静态方法,不要date用null来调用我);
}8.您可以将null传递给要使用的方法。此时,该方法可以接收任何引用类型。比如public void print(Object obj)可以这样调用print(null)。从编译的角度来看,这是可能的,但是结果完全取决于方法。一个安全的null方法,比如本例中的print方法,不会抛出null指针异常,而是优雅地退出。
如果业务逻辑允许,建议使用null safe方法。
9.可以用==或者!=比较空值的运算,但不能使用其他算法或逻辑运算,如小于或大于。在Java中,null==null将返回true。
推荐相关文章和教程:java入门。以上是java中null是否为对象的细节。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。