首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用StringBuilder实现回文实例

用StringBuilder实现回文实例
EN

Stack Overflow用户
提问于 2021-02-11 18:21:46
回答 5查看 227关注 0票数 0

我试图通过一个回文示例学习如何使用StringBuilder类,并编写如下:

代码语言:javascript
运行
复制
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    StringBuilder word = new StringBuilder(scanner.nextLine());
    System.out.println(word);
    StringBuilder reverseWord = word.reverse();
    System.out.println(reverseWord);

    if(word.toString().equals(reverseWord.toString())) {
        System.out.println("yes");
    }else {
        System.out.println("no");
    }
}

程序不断给我的结果是“是”,但我不明白为什么?显然,我的if块有问题,但看不清它是什么。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2021-02-11 18:31:54

当您调用word.reverse()时,它不会返回反向StringBuilder的新实例。相反,它是在StringBuilder中反转元素,因此wordreverseWord StringBuilder对象都有相反顺序的字符。您不需要使用两个StringBuilder对象。您只需要一个来找出相反的情况,然后您就可以将它与原语进行如下比较:

代码语言:javascript
运行
复制
String input = scanner.nextLine();
StringBuilder reverseWordBuilder = new StringBuilder(input);

String reversedWord = reverseWordBuilder.reverse().toString();
if(input.equals(reversedWord)) {
    System.out.println("yes");
} else {
    System.out.println("no");
}
票数 1
EN

Stack Overflow用户

发布于 2021-02-11 18:28:13

word.reverse()的调用返回this,而不是StringBuilder的新实例-因此您将看到word == reverseWord

如果将System.out.println(word);移动到word.reverse()调用下,则可以确认这一点,并且两行都将打印相同(反向)值。

票数 1
EN

Stack Overflow用户

发布于 2021-02-11 18:33:25

StringBuilder可变的,这意味着您可以更改他的状态,而无需创建它的新实例。String是一个不变的,它意味着每当您做一些更改时,就会在heap中创建一个具有不同地址的新对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66160542

复制
相关文章

相似问题

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