以下是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?
您正在将字符串
与StringBuilder
进行比较。当然,这将是错误
。
尝试b=s.equals(j.toString());
这应该使b
true
。
结果为false的原因在String.equals()
留档中有明确说明:
将此字符串与指定对象进行比较。当且仅当参数不是null并且是表示与此对象相同的字符序列的String对象时,结果为true。
您正在将一个StringBuilder
对象传递给equals()
而不是String
对象,因此无论字符如何,结果都是false。
String
和StringBuilder
都实现了CharSequence
,因此可以使用String。contentEquals()
:
boolean b = s.contentEquals(j);
输出为false
,因为您正在将String
对象与StringBuilder
对象进行比较。虽然s
和j
都包含相同的数据,但它们是不同的对象类型,因此它们永远不会“相等”。要使答案为真
,可以将j
更改为字符串
,而不是StringBuilder
:
String j = new StringBuilder(s).reverse().toString();
1. 2.
在这一环节中,称: s1指向字符串池的位置,s2指向堆内存的位置。
这些声明有什么不同? 每种情况下的内存分配情况如何?
除了后面使用正则表达式之外,java.lang.String的和方法有什么区别?对于简单的替换,如将替换为,有什么区别吗?
Mocha支持断言库中任何抛出的s err.expected和err.actual属性AssertionError。mocha将尝试显示预期内容与断言实际看到的内容之间的差异。这是一个“字符串”差异的例子: