在java中
s1 = "d";
s2 = "D"
System.out.println(s1.compareTo(s2));
如果它们是相同的,那么无论你使用什么字母表,它都会给出输出32,即一个是大写,一个是较小的。
为什么会这样???
答案 0 :(得分:1)
Here's compareTo
方法的javadoc,这就是它所说的:
按字典顺序比较两个字符串。比较是基于 字符串中每个字符的Unicode值。字符序列 由此String对象表示,按字典顺序进行比较 由参数字符串表示的字符序列。结果是 如果此String对象按字典顺序排在前面,则为负整数 参数字符串。如果是这个String,结果是一个正整数 对象按字典顺序跟随参数字符串。结果是 如果字符串相等则为零; compareTo正好返回0 equals(Object)方法将返回true。
因此,它根据字符的unicode值进行比较。由于D
和d
是不同的字符,因此它们具有不同的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。