StringUtils之equals分析

转载 2018年04月15日 15:52:44

打开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获取第N次字符串出现的位置,StringUtils详解(判空,去空,比较,查找)

用一个工具类commons-lang3.jar 如果找不到的同学的,可以导入maven dependency> groupId>org.apache.commonsgroupId> ...
  • whb3299065
  • whb3299065
  • 2018-01-08 18:06:44
  • 76

(十七)Java工具类StringUtils的equals、equalsIgnoreCase、equalsAny、equalsAnyIgnoreCase方法详解

1.equals方法比较两个字符串是否相等 public static boolean equals(CharSequence cs1, CharSequence cs2) { ...
  • yaomingyang
  • yaomingyang
  • 2018-02-06 14:32:49
  • 148

Sprint源码学习之StringUtils类

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ ...
  • chunqiuwei
  • chunqiuwei
  • 2012-10-31 10:08:28
  • 11425

Java面试——从JVM角度比较equals和==的区别

1.  Java中数据类型分类 1.1    基本数据类型 又称为原始数据类型,byte,short,char,int,long,float,double,boolean 他们之间的比较应该使用(==...
  • SEU_Calvin
  • SEU_Calvin
  • 2016-08-01 20:55:52
  • 14099

StringUtils就这1张图,必备(二)

开心一笑【男女朋友一起去逛街, 女朋友:哎哟,脚好酸哦。 男朋友很紧张:怎么了?是不是踩到柠檬了?】提出问题Land3的StringUtils类如何使用???解决问题StringUtils是工作中...
  • huangwenyi1010
  • huangwenyi1010
  • 2016-08-20 22:31:40
  • 1361

从Java中堆内存和栈内存分配中详谈String使用equals和==比较的区别

Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间...
  • javagaorui5944
  • javagaorui5944
  • 2015-12-15 21:48:16
  • 447

StringUtils函数全集

  • 2010年12月02日 15:11
  • 38KB
  • 下载

StringUtils.isEmpty和StringUtils.isBlank用法和区别

两个方法都是判断字符是否为空的。前者是要求没有任何字符,即str==null 或 str.length()==0;后者要求是空白字符,即无意义字符。其实isBlank判断的空字符是包括了isEmpty...
  • u011217058
  • u011217058
  • 2017-04-07 09:27:32
  • 1738

StringUtils的各项用法

  • 2013年04月23日 10:54
  • 25KB
  • 下载

java核心API之String,StringBuffer和StringBuilder以及equals与==的区别和联系

java核心API之String,StringBuffer和StringBuilder以及equals与==的区别和联系
  • canot
  • canot
  • 2015-12-24 15:35:35
  • 1113
收藏助手
不良信息举报
您举报文章:StringUtils之equals分析
举报原因:
原因补充:

(最多只允许输入30个字)