Java 中的字符串和开关大小写

问题描述 投票:0回答:7

请解释以下代码示例的输出“0”。在 Java 中的 switch case 语句中使用字符串是否合法?

public class Test {

static int x;

public static void main(String[] args) {
    String ss = "aBc";
    String s = "ABC";
    switch (s) {
        case "":
            x++;
        case "AbC":
            x++;
            break;
        case "ABC":
            x--;
        default:
            x++;

    }
    System.out.print(x);
}

}

java string switch-statement
7个回答
3
投票

如果您没有添加break,它将同时调用case(这是正确的)和default。

case "ABC" : x--;
default : x++;

所以就经历了以上的案例


2
投票

您的

switch
中遇到了两个案例。

switch(s){
    case "" : x++;
    case "AbC" : x++; break;
    case "ABC" : x--;
    default : x++;
}

您因为

"ABC"
而遇到了
s = "ABC"
情况,但您没有
break
,这会导致您完全离开
switch
语句。因此,您也会遇到
default
情况。

因此,在

x
情况之后,
"ABC"
设置为 -1,但随后由于
default
情况立即设置为 0。

现在,我不会说你的

break
声明缺失了,因为这很可能是故意的。但这是包含它们的一个很好的理由,因为如果不这样做,您可能会出现异常行为。


2
投票

变量

x
默认初始化为
0

static int x;

相同
static int x = 0;

然后

s = "ABC"
,因此你到达
case "ABC"
,从而形成
x = -1
。然而,在本例条目中没有
break
,因此您继续执行
default
x++
,即
-1 + 1
0


2
投票

您没有在 case“ABC”之后放置中断,因此默认值也可能被执行。默认 x = 0,并且执行了 switch 语句的这些行:

case "ABC" : x--;
default : x++;

因此,x=0,则第一行之后 x=-1,第二行之后 x = 0。


1
投票

是的,在java中使用字符串是合法的,不像C只接受整数。

您有

s = "ABC"
,它执行第三种默认情况,因为您没有在第三种情况中指定
break
来界定您的切换行为。因此,在 x-- 之后 x 的
3rd case
值中,x = -1,默认情况下它会增加回 0。因此 x 的值相对于其初始值没有改变。


0
投票

您缺少

break
声明:

// x is initialized to zero
// s = "ABC"
switch(s) {
    case "": // Skipped
        x++;
    case "AbC": // Skipped
        x++; 
        break;
    case "ABC":  // This is executed
        x--;     // x is now equal to 1, but there's no break statement
    default:     // Since there's no break statement, this block is also executed
        x++;     // x is now equal to 1--: 0
}

0
投票
is it legal to use string in switch case statement in Java ?

Java 7 引入了带有 sting 的 switch 语句。并且在 switch 语句中使用字符串几乎是合法的。

Switch case 语法 - 你的 switch 语句中缺少

break

switch(expression){
    case value :
       //Statements
       break; //optional
    case value :
       //Statements
       break; //optional
    //You can have any number of case statements.
    default : //Optional
       //Statements
}

我修改了第1行添加了

break
关键字,在你的代码中,当第3行首先执行时,它将把x值0更改为-1,然后第4行将执行它将x值-1更改为0,所以你的结果是“0 ”

public class Test {

    static int x;
    public static void main(String[] args) {
    String ss = "aBc";
    String s = "ABC";
    switch(s){
    case "" : x++; break;   // Line 1         
    case "AbC" : x++;break; // Line 2
    case "ABC" : x--;       // Line 3
    default : x++;          // Line 4

    }
    System.out.print(x);
    }    
}
© www.soinside.com 2019 - 2024. All rights reserved.