为什么我们不能在String上使用&lt ;,< =,>,> =关系运算符?

时间:2014-07-03 14:42:11

标签: java

我想知道为什么我们不能在字符串文字上使用&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如此真实???

谁能解释为什么?在此先感谢.. :))

4 个答案:

答案 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));
    }
}