【问题标题】:Java : space makes a difference in compilation?Java:空间对编译有影响吗?
【发布时间】:2015-12-07 13:38:09
【问题描述】:

我正在编写一个程序(一种 Piglatin 之类的......),其中我无意中错过了语句中的一个变量:

String a = "R"++'a';

实际上应该是String a = "R"+text+'a';。编译器产生错误。但是,当我成功时:

String a = "R"+ +'a';

编译的程序。

我想知道为什么即使 Java 不在乎您是否在某些语句中放置空格,为什么放置空格也会有所不同,例如:String a="ABCD";String a = "ABCD"; 相同

有人可以解释一下这种行为吗?

【问题讨论】:

  • 能否请您发布编译器的错误消息?
  • 是的。编译器说 ';'预期的。 并将错误指针放在同一条语句上。

标签: java string


【解决方案1】:

++ 本身就是一个运算符(增量前或增量后)。

将它放在字符串和字符文字之间在语法上是无效的。

但是对于"R"+ +'a',第二个+ 将绑定到字符字面量a 并将充当一元加运算符(此运算符具有非常高的优先级)。这不是无操作:在 Java 中,它具有将a类型提升int 的效果。这种类型提升意味着输出将是R97 而不是Ra(97 是a 的ASCII 编号)。剩余的+ 充当字符串连接器。

【讨论】:

    【解决方案2】:

    因为++是一元运算符,而+ +解释如下:

    1. "R"+ 表示一个字符串连接,然后是第二个参数(用于评估连接)
    2. +'a' 表示将符号 (+) 显式设置为(数字)char 文字 'a'。因为您已经明确设置了值的符号,所以它被视为数字,因此+'a' 的结果是字符'a' 的数字表示,这就是结果为R97 的原因。

    如果您执行String a = "R"+ -'a'; 的方式相同,那么'a' 的数值(即97)将被取反,结果将为R-97

    但是,如果您只是忽略了 'a' 之前的 + 符号,那么 'a' 将被视为字符,而不是数字,结果将是 Ra

    【讨论】:

      【解决方案3】:

      String a = "R"++'a'; 暗示 "R"++'a''a' 不是由 + 运算符附加的,因此错误必须存在。 另一方面,String a = "R"+ +'a'; 表示 "R" 然后是 + 运算符,然后是 +'a'(即 97)。因此它编译。输出将是 R97

      【讨论】:

        【解决方案4】:

        运算符 ++ 应用于数字并将此值增加 1。 当你写 ++ 'c' 这意味着你想添加字符串和正字符

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-11
          • 2013-07-04
          • 1970-01-01
          • 1970-01-01
          • 2012-10-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多