Java String和StringBuffer的工作原理

时间:2017-10-04 10:44:28

标签: java

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条件,为什么会这样?

2 个答案:

答案 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