【问题标题】:The expressions which evaluate to a boolean value can not be concatenated with a String in Java. Why? [duplicate]评估为布尔值的表达式不能与 Java 中的字符串连接。为什么? [复制]
【发布时间】:2011-11-09 10:25:57
【问题描述】:

让我们看看下面最简单的Java代码sn-p。

final public class Parsing
{
    public static void main(String[] args)
    {
        int p=10;
        int q=10;

        System.out.println(p==q);
    }
}

上面的 Java 代码很好,并且显示 true,因为相同类型 (int) 的 p 和 q 都包含相同的值 (10)。现在,我想连接 println() 的参数,使其包含一个新的换行序列 \n 并且结果显示在一个新的行中,如下所示。

System.out.println("\n"+p==q);

这是不允许的,因为表达式 p==q 计算一个布尔值并且 Java 中的布尔类型(不是布尔,一种包装类型)永远不能转换为任何其他可用的类型在爪哇。因此,上面提到的语句是无效的,它会发出编译时错误。在 Java 中解决这种情况的方法是什么?


令人惊讶的是,以下语句在 Java 中完全有效。

System.out.println("\n"+true);
System.out.println("\n"+false);

分别显示真假。如何?为什么语句System.out.println("\n"+p==q); 中不允许出现同样的内容?

【问题讨论】:

    标签: java


    【解决方案1】:

    你必须在 p==q 周围加上括号 () (你写它的方式,它会被解释为 ("\n"+p) == q,并且 String 不能与布尔值进行比较)。像

    这样的表达式需要此运算符优先级
    if(a+b == c+d)
    

    等等。所以,

    System.out.println("\n"+(p==q));
    

    应该可以正常工作。

    【讨论】:

    【解决方案2】:

    System.out.println("\n"+p==q);

    编译器将其视为

    System.out.println(("\n"+p)==q); 
    

    使用

    System.out.println("\n"+(p==q)); 
    

    【讨论】:

      【解决方案3】:

      这是不允许的,因为表达式 p==q 计算一个布尔值,而 Java 中的布尔类型(不是布尔类型,一种包装类型)永远不能转换为 Java 中可用的任何其他类型。

      这是完全错误的。编译器通过String.valueOf() 实现将任何内容连接到字符串,该String.valueOf() 也被重载以接受布尔值。

      编译器出错的原因仅仅是+的运算符优先级高于==,所以你的代码相当于

      System.out.println(("\n"+p)==q);
      

      并且发生错误是因为您将 Stringint== 进行比较

      另一方面,这就像预期的那样工作:

      System.out.println("\n"+(p==q));
      

      【讨论】:

        【解决方案4】:

        运算符的优先顺序意味着您的表达式被评估为

         ("\n" + p) == q
        

        将字符串与 int 进行比较是没有意义的,因此编译失败,请尝试:

         "\n" + (p == q)
        

        【讨论】:

          【解决方案5】:

          啊。说法是错误的。

          System.out.println("\n"+(p==q));
          

          ~Dheeraj

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-11-11
            • 1970-01-01
            • 2018-05-06
            • 1970-01-01
            • 2013-10-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多