理解null关键字及集合或字符串需先判断null再判断长度的原因

来源:互联网 发布:正整数分解质因数算法 编辑:程序博客网 时间:2024/06/05 17:30

null关键字

Java中,null是一个关键字,代表不确定的对象。null只能用于赋给引用类型变量,不可以赋给基本数据类型变量。类成员引用变量默认为null。但对于非类成员变量,不能只声明定义,不进行初始化,但后边的代码中使用了它,这时候,就会进行报错。下边代码:
        Connection connection = null;        try {            connection = DriverManager.getConnection("url", "name", "passwod");        } catch (SQLException e) {            e.printStackTrace();        }        String catalog = connection.getCatalog();
 这时候,如果不指定connection为null,就使用connection,就会报错。 null本身虽然能代表一个不确定的对象,但就null本身来说,它不是对象,也不知道什么类型,也不是java.lang.Object的实例。

判断字符串/数组/集合 不为空的方法

 在代码中,我们经常这样来判断一个字符串是否为空。即:首先判断是否为null,再判断长度是否大于0.
    public static void test(String s) {        if (s != null && s.length() > 0) {            System.out.println(s.charAt(0));            return;        }    }
为什么要这样进行判断呢。为什么不能直接写一个条件就判断。为什么必须得将s != null放在s.length() > 0前面进行判断呢。我们看下边的代码会出现什么错误:
    public static void test(String s) {        if (s.length() > 0 && s != null) {            System.out.println(s.charAt(0));            return;        }    }

这时候在main方法中调用此方法:

    public static void main(String[] args) {        String s = null;        test(s);    }

这样会出现:Exception in thread “main” java.lang.NullPointerException. 即空指针异常。这说明,必须得把s != null的判断条件放在前面,就是为了避免这种情况,当引用类型声明为null时,它不是一个对象类型,所以也就没有length方法了。
那么写两个条件判断也就好理解了:s != null是为了防止String类型声明为null;s.length() > 0的判断条件,为了防止:s=”“赋值空串。当字符串初始化为:s=”“时,其长度为0,但却在内存中开辟了空间。null不是对象,null不是对象,”“是对象,所以null没有分配空间,”“分配了空间是对象,所以null没有分配空间,”“分配了空间,但它是一个空串,所以要对空串这种情况进行判断。