为什么==运算符不在这里工作,但等于在java中工作

Kan*_*nth 1 java string equals palindrome

我编写了代码来检查给定的字符串是否是回文.但在这里我没有显式创建任何String对象.当我们不明确创建时,"=="也应该用于比较字符串.但是如果我使用==,我在这里得不到正确的输出.为了清楚我的问题,我在下面给出了另一个代码

代码1:这里."=="无效.

class Palindrome 
{
    public static void main(String[] args) 
    {

        StringBuffer sb1=new StringBuffer();
        sb1.append("anna");
        String s1=sb1.toString();
        StringBuffer sb2=new StringBuffer();
        sb2=sb1.reverse();
        String s2=sb2.toString();
        if(s1.equals(s2))
        {
            System.out.println("The given String is a Palindrome");
        }
        else

            System.out.println("Not a Palindrome");

    }
}
Run Code Online (Sandbox Code Playgroud)

代码2:这里==有效

class Stringdemo 
{
    public static void main(String[] args) 
    {
        String str1="hello";
        String str2="hello";
        if(str1==str2)
        {
            System.out.println("both strings are same");
        }
        else
        {
            System.out.println("both strings are not Same");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

chu*_*ubs 5

使用StringBuilder/Buffer.toString()将创建一个新实例,因此equals()的工作原理,但==没有.在使用字符串文字的情况下,任何字符串文字的字符串都将被添加到类的常量池中,因此string1和string2将仅指向常量池中"hello"的相同引用,ergo ==说的是真的,因为它们是相同的参考.