You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这段忽略大小写的字符串比较代码返回false?

问题原因解析

首先得指出你代码里的两个关键问题,正是它们导致了不符合预期的结果:

1. 误用了字符串比较方法

Java的String类里的equals()方法根本没有接受第二个布尔参数的重载版本!你想实现的“忽略大小写比较”,对应的正确方法是equalsIgnoreCase()——这个方法专门用来在忽略大小写的前提下判断两个字符串是否相等。

你写的equals(..., true)其实是语法错误(纯Java环境下),如果你的代码居然能运行,大概率是混淆了其他语言(比如Groovy)或者第三方工具类的写法,但在标准Java里这是不合法的。

2. 字符数组排序的写法错误

Java中char[]数组并没有sortedArray()这个方法,要对字符数组排序,你需要使用java.util.Arrays类的sort()静态方法,先排序数组,再转成字符串。

修正后的正确代码

如果你的目标是验证“Carthorse”和“Orchestra”排序后忽略大小写是否相等,正确的代码应该是这样的:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // 处理第一个字符串:转数组、排序、转字符串
        char[] carthorseArr = "Carthorse".toCharArray();
        Arrays.sort(carthorseArr);
        String sortedCarthorse = new String(carthorseArr);
        
        // 处理第二个字符串
        char[] orchestraArr = "Orchestra".toCharArray();
        Arrays.sort(orchestraArr);
        String sortedOrchestra = new String(orchestraArr);
        
        // 忽略大小写比较
        System.out.println(sortedCarthorse.equalsIgnoreCase(sortedOrchestra)); // 输出 true
    }
}

为什么原来的代码返回false?
假设你的代码通过某种方式绕过了语法错误(比如用了非标准的方法),那大概率是因为你用了严格的equals()比较——它会同时检查字符内容和大小写,而排序后的两个字符串大小写不同(比如一个开头是C,一个是O),所以返回false;而当字符串未大写时,排序后的大小写一致,所以equals()返回true。

内容的提问来源于stack exchange,提问作者HakunaMatata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:04:35