我试图通过一个回文示例学习如何使用StringBuilder类,并编写如下:
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块有问题,但看不清它是什么。
发布于 2021-02-11 18:31:54
当您调用word.reverse()时,它不会返回反向StringBuilder的新实例。相反,它是在StringBuilder中反转元素,因此word和reverseWord StringBuilder对象都有相反顺序的字符。您不需要使用两个StringBuilder对象。您只需要一个来找出相反的情况,然后您就可以将它与原语进行如下比较:
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");
}发布于 2021-02-11 18:28:13
对word.reverse()的调用返回this,而不是StringBuilder的新实例-因此您将看到word == reverseWord。
如果将System.out.println(word);移动到word.reverse()调用下,则可以确认这一点,并且两行都将打印相同(反向)值。
发布于 2021-02-11 18:33:25
StringBuilder是可变的,这意味着您可以更改他的状态,而无需创建它的新实例。String是一个不变的,它意味着每当您做一些更改时,就会在heap中创建一个具有不同地址的新对象。
https://stackoverflow.com/questions/66160542
复制相似问题