[英]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.