Java中的compareTo()方法不起作用

时间:2017-07-15 08:36:04

标签: java string comparison comparable

在java中

s1 = "d";
s2 = "D"

System.out.println(s1.compareTo(s2));

如果它们是相同的,那么无论你使用什么字母表,它都会给出输出32,即一个是大写,一个是较小的。

为什么会这样???

4 个答案:

答案 0 :(得分:1)

Here's compareTo方法的javadoc,这就是它所说的:

  

按字典顺序比较两个字符串。比较是基于   字符串中每个字符的Unicode值。字符序列   由此String对象表示,按字典顺序进行比较   由参数字符串表示的字符序列。结果是   如果此String对象按字典顺序排在前面,则为负整数   参数字符串。如果是这个String,结果是一个正整数   对象按字典顺序跟随参数字符串。结果是   如果字符串相等则为零; compareTo正好返回0   equals(Object)方法将返回true。

因此,它根据字符的unicode值进行比较。由于Dd是不同的字符,因此它们具有不同的unicode值,因此,比较不会返回0.此外,根据this Unicode chart,大写字母的unicode值低于小写字母和因此,你获得正面价值。

如果您想要不区分大小写,那么您应该使用compareToIgnoreCase

答案 1 :(得分:1)

    String  s1 = "d";   // Ascii value for 'd' 100
    String s2 = "D"; //Ascii value for 'D' 68

    System.out.println(s1.compareTo(s2));

因此32(100-68)是输出

答案 2 :(得分:1)

compareTo返回的内容取决于实现Comparable接口的特定类如何实现,compareTo方法返回负整数,零或正整数,因为此对象小于,等于,或大于指定的对象 请参阅javadoc,例如:https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html#compareTo(T)

答案 3 :(得分:1)

Comparable<T> compareTo应该像这样实施:

  • 如果this大于参数,则返回正数
  • 如果this等于参数,则返回0
  • 如果this小于参数,则返回一个负数。

由此可以看出,一个易于实现比较整数的compareTo方法只是从this中减去参数。那么,字符可以表示为整数,它们可以吗?

您正在使用的compareTo方法的实现可能是将this和参数转换为其Unicode值,并从后者中减去后者。

让我解释一下为什么每次都会得到32分。

&#34; a&#34;的Unicode值是97和A&#34; A&#34;是65岁。&#34; b&#34;是98和&#34; B&#34;是66 ......等等。

现在我们可以看到小写字母与大写字母之间的Unicode值之间的差异始终为32.而且,由于compareTo从另一个中减去一个值,因此总是得到32。