I thought revers should be equal “tor”, but when I tried
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));
I got such result
stringBuilders[i].reverse().toString() = rot, reverse = tor, straight = tor, rev == str? false
Why?
rev == str ? gives output as false
How can be that
stringBuilders[i].reverse().toString() = rot, reverse = tor,
Advertisement
Answer
Your first problem might be that straight uses index j, while the rest of the code uses index i.
Here is your code as an 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));
Output is:
stringBuilders[i].reverse().toString() = tor reverse = rot straight = tor rev == str? false
That is not the output you showed.
Anyway, your main problem is that reverse():
Causes this character sequence to be replaced by the reverse of the sequence.
So, your first call to reverse() makes the stringBuilder have the value rot, which is also the value assigned to the reverse variable.
Your second call to reverse() in the print statement reverse it back to the value tor, which is then the value printed.