zoukankan      html  css  js  c++  java
  • equals 为什么要把常量写在前面?

    看例子

    使用str1.equals("abc");

    如果str1是null,空是没有equals方法的,会抛出空指针异常

    如果"abc".equals(str1);如果str1是null,最终始终返回的都是false;

    也就是说 null在前会报空指针,null在后不会,会返回false

    空指针就是空引用,java空指针异常就是引用本身为空,却调用了方法,这个时候就会出现空指针异常。可以理解,成员变量和方法是属于对象的(除去静态),在对象中才存在相对应的成员变量和方法,然后通过对象去调用这些成员变量和方法。对于空指针来说,它不指向任何对象,也就没有所谓的成员变量和方法,这个时候用它去调用某些属性和方法,当然会出现空指针异常。

    null是所有引用类型的默认值,如果没有让一个引用指向一个实际存在的对象,它的默认值就是null。null本质上是一个值,这跟int的默认值是0,boolean的默认值是false一样。现在,我们通常都使用像eclipse等的集成开发环境进行开发,一般在定义变量的时候都会进行初始化(这也是写代码的一个良好的习惯),如果没有进行初始化,系统会进行提示。

    所以null调任何方法都会报空指针,空字符串则不会,因为已经分配了内存地址

    反过来想为什么把变量放在括号里就不会出现空指针异常呢?

    equals()方法也可以比较一个变量是不是等于空,就是 "abc".equals(null); 括号里直接写null都可以了,还怕变量为null吗?

    建议使用org.apache.commons.lang包下的StringUtils.equals(String str1, String str2)方法,这是官方给出的工具类

    其中利用三元表达式规避了null的问题

    public static boolean equals(String str1, String str2)
        {
            return str1 != null ? str1.equals(str2) : str2 == null;
        }
      //忽略大小写进行比较
        public static boolean equalsIgnoreCase(String str1, String str2)
        {
            return str1 != null ? str1.equalsIgnoreCase(str2) : str2 == null;
        }
    学习时的痛苦是暂时的 未学到的痛苦是终生的
    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    C#中string类型前加@标志的作用
    frame和iframe的区别
    css中float left与float right的使用说明
    一、Linux目录结构
    用户 'IIS APPPOOLClassic .NET AppPool' 登录失败。
    Jquery在线引用地址:
    分析器错误消息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。
    转:沙漠玫瑰眼影教程
    转:查看oracle数据库允许的最大连接数和当前连接数
    转:怎么用Sql语句获取一个数据库中的所有表的名字
  • 原文地址:https://www.cnblogs.com/juanxincai/p/12320333.html
Copyright © 2011-2022 走看看