zoukankan      html  css  js  c++  java
  • "aa".equals(name)这种写法为什么就可以避免空指针

    public static void main(String[] args) {
    
      String name=null;
      if("aa".equals(name))//这种情形,不出现空指针异常  
    //if(a.equals("aa"))//出现空指针异常
    {
    System.out.println(true);
    }
    else { System.out.println(false); } }

    上面的两句不同的比较语句测试,第一句不出现空指针异常,第二句出现。 所以在变量和常量比较的时候,一般把常量放在前面。为了避免空指针异常。但是我的问题是:变量在前时候,读到变量,变量为空,就出现异常了。 为什么变量在后时候,name变量就不用读了吗?既然要比较肯定也要读啊,问题只是先后的问题。为什么放在后面就就不报空指针呢?

    看了一下string类的equals方法

    public boolean equals(Object anObject) {
         if (this == anObject) {
           return true;
         }
         if (anObject instanceof String) {
           String anotherString = (String) anObject;
           int n = value.length;
           if (n == anotherString.value.length) {
             char v1[] = value;
             char v2[] = anotherString.value;
             int i = 0;
             while (n-- != 0) {
               if (v1[i] != v2[i])
                   return false;
               i++;
             }
             return true;
           }
         }
         return false;
       }

    但是我的问题又来了:源码我看了一下,也明白,但是在源码中如果anobject为空的时候,就不会出现空指针异常吗 ? 后来经过一番讨论后,我得出的结论是这样的:

    问题是出现在调用方法上了。因为null值,并不是一个String对象。而你通过声明的String对象引用去 调用了String对象的实例方法。当然不可以了。null调用了方法。

    所以系统报出了,空指针异常。所以说,呼应文章的标题,这样还真的是避免了控制针异常。毕竟“aaa”这样的形式,不是null形式,是可以调用方法的。

  • 相关阅读:
    linux查看CPU性能及工作状态的指令mpstat,vmstat,iostat,sar,top
    Linux vmstat命令实战详解
    dstat 性能监测工具
    sysstat 工具
    Linux命令详解----iostat
    Linux CPU实时监控mpstat命令详解
    Linux Top 命令解析 比较详细
    Linux统计/监控工具SAR详细介绍
    ubuntu 添加用户到已存在的组
    Ubuntu 14.04 使用速度极快的Genymotion 取代蜗牛速度的原生AVD模拟器
  • 原文地址:https://www.cnblogs.com/TTTTT/p/5905440.html
Copyright © 2011-2022 走看看