求助一个JAVA比较字符串的问题

String a = "2";
String b = "11";
问a和b哪个大????比较的原理是什么???求教

第1个回答  2014-03-05

首先字符串是不能比较大小的,如果你非要比较这两个字符串里面的值,也就是"2"和"11",那就是说比较的是字符串里面的数值类型的值,可以这样:

//字符串里面数值的值
int a_value = Integer.parseInt(a);
int b_value = Integer.parseInt(b);
//比较
boolean result = a_value > b_value;
//输出结果
System.out.println(result);

追问

还是不明白。不能直接比较???

追答

字符串根本就没有大小这个属性,只有长度大小和字母顺序的大小,你想想,两个字符串"abc","def",他们比较大小你觉得回得出什么结果呢,就好比你说两个茄子比较谁跑得快,根本是无法比较的。

追问

String a = "2";
String b = "11";
int result = a.compareTo(b);
System.out.println(result);

运行结果result是1。这怎么解释???

追答

compareTo()方式是Comparable接口的方法,实现Comparable接口就能调用compareTo()方法,而String类是实现了这个接口的,所以可以调用compareTo()方法,为了直观说明问题,这里是String的compareTo()方法的JDK源代码,他说明了什么,说明了比较的是按照字典顺序比较字符串的大小。这下明白了吧。
public int compareTo(String anotherString) {
int len1 = count;
int len2 = anotherString.count;
int n = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;

if (i == j) {
int k = i;
int lim = n + i;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
} else {
while (n-- != 0) {
char c1 = v1[i++];
char c2 = v2[j++];
if (c1 != c2) {
return c1 - c2;
}
}
}
return len1 - len2;
}

第2个回答  2014-03-05
a大;
String默认实现的compareTo方法是从第一个字符开始比较的;
如果你想按长度比较的话,可以自己写一个conparetor;追问

就是直接比较第一个字符就行吗?就拿我提问的这个例子,我运行后结果是1,就是因为2-1=1??

String a = "2";
String b = "11";
int result = a.compareTo(b);
System.out.println(result);

追答

恩,是一个一个往下比的,第一个字符相同,就比第二个,直到有一个不同的。

追问

好的我知道了 真心感谢

本回答被提问者采纳
第3个回答  2014-03-05
字符串比较大小原理是比较两个字符串相同位置的字符大小,所以a大。
相似回答