我想知道为什么我们不能在字符串文字上使用&lt ;,< =,>,> =关系运算符。
import java.util.*;
public class Coffee{
public static void main(String args[]){
String s1="Cat";
String s2="Dog";
System.out.println(s1<s2);
}
}
得到一个错误“operator&lt;不能应用于java.lang.String”为什么?
不能像这样比较C&lt; D如此真实???
谁能解释为什么?在此先感谢.. :))
答案 0 :(得分:4)
简单的答案是:因为它们没有实施。 Java(与C / C ++不同)不依赖于运算符重载,因此您必须使用length
方法获取String的值,然后将结果与< > <= >=
运算符进行比较。
旁注:Java中的字符串也实现了Comparable接口。它允许你使用compareTo方法,如果参数是字符串相等则返回0,如果参数大于你运行此方法的字符串,则返回小于0的值;如果参数是一个小于该字符串的字符串,则值大于0。
旁注2:通过&#34;更大的字符串&#34;我的意思是词典编纂更大(按字母顺序)。
答案 1 :(得分:1)
String不是像int和double那样的原始数据类型。字符串是对象。
对于字符串,关系运算符==,仅检查对象是否“指向”堆中的相同数据。
例如,
String s1="Cat";
String s2= new String("Cat");
if(s1==s2)
System.out.println("They are the same");
if语句不会执行。 这是因为在创建“Cat”实例后,您在堆中创建了另一个“Cat”实例。这两个变量并没有“指向”相同的数据。
compareTo方法检查变量在堆中分配的实际数据是否彼此相等,并且是查看两个String对象是否彼此相等的许多正确方法之一。
我希望它有所帮助,如果我的回答不清楚,请不要犹豫。
答案 2 :(得分:0)
如果您确实想这样做,请使用compareTo
结果。
if ("a".compareTo("b") >= 0) {
// do stuff
}
如果你想忽略大小写,你可以这样做:
if (String.CASE_INSENSITIVE_ORDER.compare("A", "b") <= 0) {
// do stuff
}
答案 3 :(得分:0)
这是正确的方法:
import java.util.*;
public class Coffee {
public static void main(String args[]) {
String s1="Cat";
String s2="Dog";
System.out.println(s1.compareTo(s2));
}
}