StringUtils之equals分析

打开org.apache.commons.lang包下面的StringUtils.class源码

查看源码

[java] view plain copy
  1. /** 
  2.   * <p>Compares two Strings, returning <code>true</code> if they are equal.</p> 
  3.   * 
  4.   * <p><code>null</code>s are handled without exceptions. Two <code>null</code> 
  5.   * references are considered to be equal. The comparison is case sensitive.</p> 
  6.   * 
  7.   * <pre> 
  8.   * StringUtils.equals(null, null)   = true 
  9.   * StringUtils.equals(null, "abc")  = false 
  10.   * StringUtils.equals("abc", null)  = false 
  11.   * StringUtils.equals("abc", "abc") = true 
  12.   * StringUtils.equals("abc", "ABC") = false 
  13.   * </pre> 
  14.   * 
  15.   * @see java.lang.String#equals(Object) 
  16.   * @param str1  the first String, may be null 
  17.   * @param str2  the second String, may be null 
  18.   * @return <code>true</code> if the Strings are equal, case sensitive, or 
  19.   *  both <code>null</code> 
  20.   */  
  21.  public static boolean equals(String str1, String str2) {  
  22.      return str1 == null ? str2 == null : str1.equals(str2);  
  23.  }  

翻译一下注释

/ * *

 比较了两个字符串,如果它们是相等的,那么返回的是真值。
 *
 没有异常的操作是可以处理的。两个<代码>零代码> < /
 引用被认为是相等的。比较是区分大小写的。
 *
 * <前>
 * stringutil的。= = true(null,null)
 * stringutil的。= = false(null,“abc”)
 * stringutil的。= = false(“abc”,null)
 * stringutil的。equals(“abc”,“abc”)= true
 * stringutil的。=(“abc”,“abc”)= false
 * < / pre >
 *
 * @see以# =(对象)
[java] view plain copy
  1. public static boolean equals(String str1, String str2) {  
  2.        return str1 == null ? str2 == null : str1.equals(str2);  
  3.    }  
这里传入两个String类型的参数,最后return一个boolean类型。

return用了一个三元运算符

大致就是这样格式  a?b:c

a代表条件,如果为true,只运行b,,如果为false,只运行c

上面源码就是先判断str1是否等于null

如果为空,

接着判断str2是否为空,如果也为空返回true,因为两个都等于null,所以两个也相等,如果str2不等于null,返回false,然而str1已经等于null,所以两个必定不相等

如果不为空

接着判断str1.equals(str2)    这是调用了String.class的equals的方法

看看源码,因为StringUtils.equals里面已经判断null了,所以这个里面也就不判断是否为null了

[java] view plain copy
  1.  /** 
  2.      * Compares this string to the specified object.  The result is {@code 
  3.      * true} if and only if the argument is not {@code null} and is a {@code 
  4.      * String} object that represents the same sequence of characters as this 
  5.      * object. 
  6.      * 
  7.      * @param  anObject 
  8.      *         The object to compare this {@code String} against 
  9.      * 
  10.      * @return  {@code true} if the given object represents a {@code String} 
  11.      *          equivalent to this string, {@code false} otherwise 
  12.      * 
  13.      * @see  #compareTo(String) 
  14.      * @see  #equalsIgnoreCase(String) 
  15.      */  
  16. / * *  
  17. 将该字符串与指定的对象进行比较。结果是{ @code  
  18. 如果且仅当参数不是@code null且是@code时  
  19. 字符串对象表示与此相同的字符序列  
  20. *对象。  
  21. *  
  22. @param anObject  
  23. 用来比较这个@code字符串的对象  
  24. *  
  25. @return@code,如果给定对象表示一个@code字符串  
  26. 等价于这个字符串,@code是假的  
  27. *  
  28. @see # compareTo(字符串)  
  29. @see # equalsIgnoreCase(字符串)  
  30. * /  
  31.     public boolean equals(Object anObject) {  
  32.         if (this == anObject) {  
  33.             return true;  
  34.         }  
  35.         if (anObject instanceof String) {  
  36.             String anotherString = (String)anObject;  
  37.             int n = value.length;  
  38.             if (n == anotherString.value.length) {  
  39.                 char v1[] = value;  
  40.                 char v2[] = anotherString.value;  
  41.                 int i = 0;  
  42.                 while (n-- != 0) {  
  43.                     if (v1[i] != v2[i])  
  44.                         return false;  
  45.                     i++;  
  46.                 }  
  47.                 return true;  
  48.             }  
  49.         }  
  50.         return false;  
  51.     }  

如果是对象,直接用==判断两个对象是否同一个对象,

if (this == anObject) {
            return true;
        }

不是的话判断长度是否相等value.length,

if (n == anotherString.value.length)

如果长度相等判断每个字符是否相等

  if (v1[i] != v2[i])


总结,StringUtils里面的equals方法主要是判断了一下两个对象是否等于null,等于null情况下的相等,两种情况,

后面调用了string.equals来判断是否相等,这里面也不再判断是否等于null了,这里面主要采用对象直接比较,是否属于同一个对象,

不属于的话,比较长度,

长度相等的话,长度内部还比较了数组每个位置的字符是否相等,

阅读更多
个人分类: java
上一篇tar包和jar包和war
下一篇linux删除文件操作
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭