以下是Java中的代码:
package string;
import java.util.Scanner;
public class PalindromeString
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
System.out.println("Enter the string: ");
String s=sc.next();
StringBuilder j=new StringBuilder(s).reverse();
System.out.println(j);
boolean b=s.equals(j);
System.out.println(b);
sc.close();
}
}
输出:输入字符串:女士
J =女士
假
为什么此代码的输出 false ?
答案 0 :(得分:3)
输出为false
,因为您正在将String
对象与StringBuilder
对象进行比较。虽然s
和j
都包含相同的数据,但它们是不同的对象类型,因此它们永远不会相等"。要回答true
,您可以更改j
,使其成为String
而不是StringBuilder
:
String j = new StringBuilder(s).reverse().toString();
答案 1 :(得分:2)
String.equals()
文档中明确说明了结果为假的原因:
将此字符串与指定对象进行比较。当且仅当参数不是null 并且是一个String对象时,结果才是真的,它表示与此对象相同的字符序列。
您正在将StringBuilder
对象传递给equals()
而不是String
对象,因此无论字符如何,结果都为false。
String
和StringBuilder
都实施了CharSequence
,因此您可以使用String.contentEquals()
代替:
boolean b = s.contentEquals(j);
答案 2 :(得分:0)
您正在将String
与StringBuilder
进行比较。当然会是false
。
尝试b=s.equals(j.toString());
这应该b
true
。
答案 3 :(得分:0)
stringBuilder不会覆盖Object的.equals()函数,这意味着两个引用不相同,结果为false。