Java 字符串和StringBuilder的区别
以下是Java中的代码:Java 字符串和StringBuilder的区别,java,string,stringbuilder,Java,String,Stringbuilder,以下是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=
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();
}
}
输出:输入字符串:madam
j=女士
假的
为什么此代码的输出为false?输出为
false
,因为您正在将String
对象与StringBuilder
对象进行比较。虽然s
和j
都包含相同的数据,但它们是不同的对象类型,因此它们永远不会“相等”。要使答案为真
,可以将j
更改为字符串
,而不是StringBuilder
:
String j = new StringBuilder(s).reverse().toString();
您正在将
字符串
与StringBuilder
进行比较。当然是false
尝试
b=s.equals(j.toString())
这将使b
为true
stringBuilder不会覆盖对象的.equals()函数,这意味着两个引用不相同,结果为false。文档中明确说明了结果为false的原因:
将此字符串与指定的对象进行比较。当且仅当参数不为null且为表示与此对象相同字符序列的字符串对象时,结果才为真
您正在将一个StringBuilder
对象传递给equals()
而不是String
对象,因此结果为false,与字符无关
String
和StringBuilder
都可以实现,因此您可以使用:
StringBuilder不是一个String类,所以它不应该等于,请注意,
StringBuilder
是一个实用对象,为了创建String
对象,它本身不是String
本身。这有点像把巧克力比作巧克力工厂。虽然巧克力工厂生产巧克力,但它们本身并不是巧克力。在他们的例子中,是不是StringBuilder
需要equals
?
boolean b = s.contentEquals(j);