冒号(:)操作员做什么?

2022-08-31 10:26:01

显然,冒号在Java中以多种方式使用。有人会介意解释它的作用吗?

例如:这里:

String cardString = "";
for (PlayingCard c : this.list)  // <--
{
    cardString += c + "\n";
}

您将如何以不同的方式编写此循环,以便不合并 ?for-each:


答案 1

在 Java 代码中有几个地方使用冒号:

1) 跳出标签(教程):

label: for (int i = 0; i < x; i++) {
    for (int j = 0; j < i; j++) {
        if (something(i, j)) break label; // jumps out of the i loop
    }
} 
// i.e. jumps to here

2) 三元条件(教程):

int a = (b < 4)? 7: 8; // if b < 4, set a to 7, else set a to 8

3) 对于每个循环(教程):

String[] ss = {"hi", "there"}
for (String s: ss) {
    print(s); // output "hi" , and "there" on the next iteration
}

4) 断言(指南):

int a = factorial(b);
assert a >= 0: "factorial may not be less than 0"; // throws an AssertionError with the message if the condition evaluates to false

5) 开关语句中的情况(教程):

switch (type) {
    case WHITESPACE:
    case RETURN:
        break;
    case NUMBER:
        print("got number: " + value);
        break;
    default:
        print("syntax error");
}

6) 方法参考(教程))

class Person {
   public static int compareByAge(Person a, Person b) {
       return a.birthday.compareTo(b.birthday);
   }}
}

Arrays.sort(persons, Person::compareByAge);

答案 2

没有“冒号”运算符,但冒号出现在两个位置:

1:在三元算子中,例如:

int x = bigInt ? 10000 : 50;

在本例中,三元运算符充当表达式的“if”。如果 bigInt 为真,则 x 将获得分配给它的 10000。如果没有,则为 50。这里的冒号表示“else”。

2:在 for-each 循环中:

double[] vals = new double[100];
//fill x with values
for (double x : vals) {
    //do something with x
}

这会依次将 x 设置为“vals”中的每个值。因此,如果 vals 包含 [10, 20.3, 30, ...],则 x 在第一次迭代时为 10,在第二次迭代中为 20.3,依此类推。

注意:我说它不是运算符,因为它只是语法。它本身不能出现在任何给定的表达式中,并且只是 for-each 和三元运算符都使用冒号的机会。