• equals变量在前面或者在后面有什么区别吗?这是一个坑点


    我就不废话那么多,直接上代码:

    package sf.com.mainTest;
    
    public class Test {
    
        public static void main(String[] args) {
            System.out.println(new Test().isBool(null));
        }
        
        public boolean isBool(String a){
            return a.equals("true");
    //        return "null".equals(a);
        }
    
    }

    如上述代码:a.equals("true");和"null".equals(a);有什么区别的?

    答案:前者会抛空指针异常,后者不会;

    剖析:如果a=null,String对象就会是一个空对象,空对象说明没有equals方法,所以就会报空指针异常;

    又如,后者a=null,"null".equals(a);结果永远都为false,原因直接看源码:

    public boolean equals(Object anObject) {
            if (this == anObject) {
                return true;
            }
         //判断anObject是否为String类型
    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; }

    为了避免这个坑点,还是使用另外一种方式吧!

    使用org.apache.commons.lang包下的StringUtils.equals(String str1, String str2)方法

    直接看源码:

    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;
        }

    看到StringUtils.equals这个方法了吧。他已经帮你绕过了那个坑,我还是比较推荐大家多用用StringUtils工具类里面的方法,

    毕竟是人家封装好的,可以直接拿来用,尽量少走弯路。

  • 相关阅读:
    You Will Be Memorizing Things
    PowerShell与cmd
    select的一些问题。
    深刻理解数据库外键含义
    html居中问题
    jsp中嵌入的html
    jdbc连接mysql报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column '金厉旭' in 'field list'
    [kuangbin带你飞]专题一 简单搜索
    算法竞赛训练指南11.2 最小生成树
    [kuangbin带你飞]专题六 最小生成树
  • 原文地址:https://www.cnblogs.com/hujinshui/p/6256105.html
Copyright © 2020-2023  润新知