繁体   English   中英

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

[英]why cant we use <, <=, >,>= relational operators on String?

我想知道为什么我们不能在字符串上使用<<=>>=关系运算符。

import java.util.*;
public class Coffee{
    public static void main(String args[]){
        String s1="Cat";
        String s2="Dog";
        System.out.println(s1 < s2);
    }
}

给出错误“运算符 < 不能应用于 java.lang.String”。

为什么 Java 不能像这样比较字符串: C < D

简单的答案是:因为它们没有被实施。 Java(不像C/C++)不依赖于操作符重载,所以你必须用length方法获取String的值,然后将结果与你的< > <= >=操作符进行比较。

旁注:Java 中的字符串也实现了 Comparable 接口。 它允许您使用 compareTo 方法,如果参数是字符串相等则返回 0,如果参数大于运行此方法的字符串,则返回值小于 0; 如果参数是小于此字符串的字符串,则值大于 0。

旁注 2:“更大的字符串”是指在字典上更大(按字母顺序)。

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 对象是否彼此相等的许多正确方法之一。

希望对您有所帮助,如果我的回答不清楚,请随时提问。

如果您真的想这样做,请使用compareTo结果。

if ("a".compareTo("b") >= 0) {
    // do stuff
}

如果你想忽略大小写,你可以这样做:

if (String.CASE_INSENSITIVE_ORDER.compare("A", "b") <= 0) {
   // do stuff
}

这是正确的方法:

import java.util.*;
public class Coffee {
    public static void main(String args[]) {
        String s1="Cat";
        String s2="Dog";
        System.out.println(s1.compareTo(s2));
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM