如何工作stringBuilder.reverse?

How work stringBuilder.reverse?

我认为 revers 应该相等 "tor",但是当我尝试时

String straight = stringBuilders[i].toString();
String reverse = stringBuilders[i].reverse().toString();
System.out.println("stringBuilders[i].reverse().toString() = " +  stringBuilders[i].reverse().toString()
+ " reverse = " + reverse + "    straight = " + straight + 
" rev == str ? " + reverse.equals(straight));

我得到了这样的结果

stringBuilders[i].reverse().toString() = rot, reverse = tor, straight = tor, rev == str? false

为什么?

rev == str ? 给出输出 false 怎么可能

stringBuilders[i].reverse().toString() = rot, reverse = tor,

stringBuilders[i].reverse().toString() = rot, reverse = tor,

StringBuilder 是可变的,因此每次调用 reverse() 时它都会将字符从头到尾翻转。

您的第一个问题可能是 straight 使用索引 j,而其余代码使用索引 i.

这是您作为 MCVE (Minimal, Complete, and Verifiable example) 的代码:

StringBuilder stringBuilder = new StringBuilder("tor");
String straight = stringBuilder.toString();
String reverse = stringBuilder.reverse().toString();
System.out.println("stringBuilders[i].reverse().toString() = " +  stringBuilder.reverse().toString() +
                   " reverse = " + reverse +
                   "    straight = " + straight +
                   " rev == str? " + reverse.equals(straight));

输出为:

stringBuilders[i].reverse().toString() = tor reverse = rot    straight = tor rev == str? false

这不是您显示的输出。

无论如何,你的主要问题是 reverse():

Causes this character sequence to be replaced by the reverse of the sequence.

因此,您对 reverse() 的第一次调用使 stringBuilder 具有值 rot,这也是分配给 reverse 变量的值。

您在 print 语句中对 reverse() 的第二次调用将其反转回值 tor,这就是打印的值。