0

有一个简单的程序,它有循环和跳转语句。我无法弄清楚它给出的输出。

public class Breaker2{
static String o = "";
public static void main(String[] args) {
  z:
  for(int x = 2; x < 7; x++) {
     //System.out.println(o + "  x is this  : " + x);
     if(x==3) continue;
     if(x==5) break z;
     o = o + x;  //2nd question is about this piece of code
  }
  System.out.println(o);
  }
}

我有以下疑问,对不起,如果有人觉得它们简单或愚蠢。

1.为什么不能在跳转标签(z:)后紧跟打印语句

  1. 它如何能够从 int 转换为 string 并添加/联系 x 变量
  2. 我看到输出 24 仅来自连接 x 的值。这是正确的结论吗?
4

2 回答 2

0

一个。为什么我不能在跳转标签 (z:) 之后立即放置一个 Print 语句

因为标签语句不能加标签,所以只有块 {} 可以加标签。

湾。它如何能够从 int 转换为 string 并添加/联系 x 变量

当任一参数为字符串时,它的“+”重载操作连接对象/基元,它连接两侧。

C。我看到输出 24 仅来自连接 x 的值。这是正确的结论吗?

是的,结果是 o + x 的串联

于 2013-07-23T11:54:01.457 回答
0

为什么我不能在跳转标签后立即放置一个打印语句?(z:)

当你定义一个标签(如Z:)时,你应该为它定义一个范围({}),并且一个标签语句的标签的范围是立即包含的语句。JLS 14.7

如果你写这样的东西(请注意我故意从 sysout 中删除了 x 以避免另一个错误)

        z:
        System.out.println(o + "  x is this  : ");
        for(int x = 2; x < 7; x++) {
            if(x==3) continue;
            if(x==5) break z;
            o = o + x;
        }

z: 的范围只有 sysout 语句,而不是 for 循环。要使其正常工作,您可以像这样使用 {} 定义范围

      z: {
            System.out.println(o + "  x is this  : ");
            for(int x = 2; x < 7; x++) {
                if(x==3) continue;
                if(x==5) break z;
                o = o + x;
            }
        }
  • 它如何能够从 int 转换为 string 并添加/联系 x 变量
  • 我看到输出 24 仅来自连接 x 的值。这是正确的结论吗?

o是 aString并且o + x被分配回o。所以+运算的输出应该是String。因此 Java 转换xString(通过做x.toString())并连接内容ox产生24

于 2013-07-23T12:17:20.597 回答