【问题标题】:Java program output should be true , But its return false why?Java程序输出应该是true,但是为什么返回false呢?
【发布时间】:2018-04-14 06:56:20
【问题描述】:

我正在检查字符串 "nitin" 是否是回文,但它返回的是错误的。

请任何人帮助我解决这个问题。

public static void main(String[] args) {
    StringBuffer sb = new StringBuffer("nitin");
    sb.reverse();
    String rev = sb.toString();

    System.out.println(sb);
    System.out.println(rev);

    if (sb.equals(rev)) {
        System.out.println("true");
    } else {
        System.out.println("false");
    }
}

【问题讨论】:

标签: java string stringbuffer


【解决方案1】:

您正在将 StringBuffer 与 String 进行比较。 试试if (sb.toString().equals(rev)) {

【讨论】:

  • 另外,我提到的str.reverse()部分也有错误。
【解决方案2】:

sbStringBufferrevString。这两个不同类型的对象不能相互比较“字符串值相等”。

使用if (sb.toString().equals(rev)):这样比较两个字符串是否相等,因为sb.toString() 被转换为字符串。

另外,开头逆向sb也是错误的。那是因为在您声明String rev = sb.toString() 时,sb 已经反转。通过在声明rev 后再次调用sb.reverse() 来取消sb。你的最终代码应该是

    StringBuffer sb = new StringBuffer("nitdin");
    sb.reverse(); // reversed sb
    String rev = sb.toString(); // rev is reversed sb to String
    sb.reverse(); // unreversed sb

    ...

    if (sb.toString().equals(rev)) // String-string comparison

【讨论】:

  • String rev=sb.toString();检查这一行
  • "他们无法比较。" - 他们可以。他们可以做到这一点是导致 OPs 问题的原因。它总是false
  • @Mulliganaceous 为什么它“没用”?什么时候比较“有用”?我倾向于选择中性的措辞。
【解决方案3】:

你可能误解了 StringBuffer 和 String。您的代码可能需要更改

    StringBuffer sb=new StringBuffer("nitin");
    String before = sb.toString();
    sb.reverse();
    String after = sb.toString();
    System.out.println(before);
    System.out.println(after);
    System.out.println(before == after);
    if(before.equals(after)){
        System.out.println("true");
    }else{
        System.out.println("false");
    }

【讨论】:

    猜你喜欢
    • 2021-11-18
    • 2014-04-24
    • 2020-03-12
    • 2011-08-08
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 2014-10-21
    相关资源
    最近更新 更多