class palindrome
{
public static void main(String args[])
{
String s1=new String();
Scanner sc= new Scanner(System.in);
System.out.println("Enter the string:");
s1=sc.nextLine();
StringBuffer s2=new StringBuffer(s1);
s2.reverse().toString();
if(s1.equals(s2.toString()))
System.out.println("Given String is palindrome");
else
System.out.println("Given String is not palindrome");
}
}
这是我检查string
是否是回文的代码。
我得到了正确的输出,但我有两个问题:
1)为什么我们不能像toString
s1.toString()
2)如果我写if(s1.equals(s2))
而不是仅使用if
条件被跳过并且输出中直接else
条件,为什么会这样?
答案 0 :(得分:0)
在你的情况下,s1是一个String,s2是StringBuffer。
如果此实例等于参数,则Object类的equals方法返回true。这就是为什么你把s1.equals(s2)视为false。
但是如果你将s2转换为String,那么这将给出真正的价值。因为字符串构建器的toString()方法将返回String值。所以请阅读String和StringBuffer和StringBuilder之间的区别。
和toString()。 Object类的equals()和hashCode()方法。
答案 1 :(得分:0)
首先,不要使用new String()
创建新的String对象。字符串是特殊对象,您不应使用new
关键字对它们进行实例化,而应使用String常量池,如下所示:
String s1 = "value"; // with value assignment
String s2; // without value assignment
现在这已经不在了,让我谈谈你的问题。
[1]你可以在String对象上使用.toString()
,但为什么会这样?将字符序列“转换”为字符序列是没有意义的。
[2]如果我理解你的问题,在测试过程中,你很可能输入一个以大写字母开头的单词,所以如果你输入Rotor
并且程序将其翻转,它最终会被{ {1}},这两个字符串不相等。 rotoR
消除了这个问题。
我改进了你的代码:
String#toLowerCase