首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在toString()方法之后使用equals()方法时的问题

在toString()方法之后使用equals()方法时的问题
EN

Stack Overflow用户
提问于 2020-10-11 06:14:23
回答 5查看 192关注 0票数 1

当我试图将两个字符串作为函数的输入并检查它们是否为字谜时,我得到了错误的输出。我写了以下代码。

代码语言:javascript
复制
    class Solution {
    public boolean isAnagram(String s, String t) {
        char sArray[] = s.toCharArray();
        char tArray[] = t.toCharArray();
        Arrays.sort(sArray);
        Arrays.sort(tArray);
        s = sArray.toString();
        t = tArray.toString();
        return s.equals(t);
        
    }
}

我所接受的示例输入是s = "anagram" and t = "nagaram"。如果选中,两个char数组将打印相同的值,即

代码语言:javascript
复制
sArray is: 
aaagmnr
tArray is: 
aaagmnr

但我的输出似乎是错误的。有谁能帮我一下,为什么我在toString()后使用toString()时会得到这样的结果?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-10-11 06:17:48

String的转换是不正确的,因为数组不覆盖toString()Object实现。

也就是说,没有理由将数组转换为String来比较它们。您可以使用Arrays.equals直接比较它们,这将返回真正的if both arrays contain the same number of elements, and all corresponding pairs of elements in the two arrays are equal

代码语言:javascript
复制
char sArray[] = s.toCharArray();
char tArray[] = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
return Arrays.equals(sArray,tArray);
票数 1
EN

Stack Overflow用户

发布于 2020-10-11 06:21:52

下面的代码行不将char数组转换为字符串:

代码语言:javascript
复制
s = sArray.toString();
t = tArray.toString();

这只会将地址转换为字符串,以便将数组转换为您应该使用的字符串:Arrays.toString(arrName)

现在代码将如下所示:

代码语言:javascript
复制
public static boolean isAnagram(String s, String t) {
    char sArray[] = s.toCharArray();
    char tArray[] = t.toCharArray();
    Arrays.sort(sArray);
    Arrays.sort(tArray);
    s = Arrays.toString(sArray);
    t = Arrays.toString(tArray);
    return s.equals(t);  
}
票数 4
EN

Stack Overflow用户

发布于 2020-10-11 06:23:08

在这里,从对象类继承的称为toString()方法的char数组上的toString()是:

代码语言:javascript
复制
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

因此,使用String.valueOf再次将字符数组转换为字符串。

代码语言:javascript
复制
s = String.valueOf(sArray);
t = String.valueOf(tArray);

因为您只需要比较,所以可以使用Arrays.equals()直接比较字符数组。

代码语言:javascript
复制
return Arrays.equals(sArray,tArray);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64301132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档