public static boolean equals(final CharSequence cs1, final CharSequence cs2) {
        if (cs1 == cs2) {
            return true;
        }
        if (cs1 == null || cs2 == null) {
            return false;
        }
        if (cs1.length() != cs2.length()) {
            return false;
        }
        if (cs1 instanceof String && cs2 instanceof String) {
            return cs1.equals(cs2);
        }
        return regionMatches(cs1, false, 0, cs2, 0, cs1.length());
    }
<p>Compares two CharSequences, returning {@code true} if they represent
equal sequences of characters.</p>

<p>{@code null}s are handled without exceptions. Two {@code null}
references are considered to be equal. The comparison is case sensitive.</p>

<pre>
StringUtils.equals(null, null)   = true
StringUtils.equals(null, "abc")  = false
StringUtils.equals("abc", null)  = false
StringUtils.equals("abc", "abc") = true
StringUtils.equals("abc", "ABC") = false
</pre>

@param cs1 the first CharSequence, may be {@code null}
@param cs2 the second CharSequence, may be {@code null}
@return {@code true} if the CharSequences are equal (case-sensitive), or both {@code null}
@see Object#equals(Object)
@since 3.0 Changed signature from equals(String, String) to equals(CharSequence, CharSequence)
fastexcel-core/src/main/java/cn/idev/excel/util/StringUtils.java