Java:对象未初始化、对象为null、对象的属性为null的区别

请看如下代码:

package com.ibelifly.commonclass.object.equals;

public class User {
    public String name;
    public int age;

    public User() {
    }
    public void show(){
        System.out.println(name+" "+age);
    }

    public static void main(String[] args) {
        User u1;
        User u2=null;
        User u3=new User();
        u1.show();
        u2.show();
        u3.show();
    }
}

这篇文章将介绍上述代码中,其中三句代码的区别:

User u1; //代码1
User u2=null; //代码2
User u3=new User(); //代码3

上述含义:

代码1:对象未初始化

代码2:对象为空(null)

代码3:对象的诸属性被赋默认值,引用类型默认值为null

运行结果:

代码1:语法错误,编译不通过。程序报错:可能尚未初始化变量u1

在这里插入图片描述

原因: u1属于局部变量,局部变量声明以后,Java 虚拟机不会自动的为它初始化为默认值。因此对于局部变量,必须先经过显示的初始化,才能使用它。

代码2:运行时异常。运行时发生NullPointerException异常,程序停止执行。

在这里插入图片描述

原因: 代码2的含义为,将引用类型变量u2置空(即u2成了一个空指针),u2不指向任何对象或有效地址。对于空指针来说,它不指向任何对象,也就没有所谓的成员变量和方法,这个时候用它去调用某些属性和方法,就会出现空指针异常NullPointerException

代码3:运行成功并输出。输出结果有null

在这里插入图片描述

原因: 使用new关键字创建对象时,若未给对象进行初始化,JVM会给对象进行默认的初始化。引用类型默认值为null,int类型默认值为0。

总结:

  1. Java为了提高代码安全性,规定:
    • 对于类的成员变量,不管程序有没有显示的初始化,Java 虚拟机都会先自动给它初始化为默认值。
    • 局部变量声明以后,Java 虚拟机不会自动的为它初始化为默认值。因此对于局部变量,必须先经过显示的初始化,才能使用它,否则编译会报错。
  2. 空指针就是空引用,Java空指针异常就是引用本身为空,却调用了方法,这个时候就会出现空指针异常。

参考文章

https://blog.csdn.net/m0_37860769/article/details/78293816

https://www.cnblogs.com/ttflove/p/6033393.html

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值