包含javaswitchstring的词条
我安装了java8,使用不了switch(String ),求解答...
java7之前,switch 是不支持string格式。 然后在 java7中支持。 在java8中 取消了对 string的支持。 可以尝试使用枚举。

java switch(表达式)中表达式的类型都可以是哪些类型?
java中的switch选择结构可以使用数据类型的数据:
1, int
2,char
3,byte
4,short
5,枚举
6, String:?PS:对JDK版本有要求,必须为1.7及以上版本
代码示例:
public class Test_char {
public static void main(String[] args) {
char c = '二';
switch(c){
case '一':
System.out.println("1.char类型");
break;
case '二':
System.out.println("2.char类型");
break;
}
}
}
扩展资料
switch表达式代码:
#includestdio.h
int main()
{
double score;printf("请输入分数:\n");
scanf("%lf",score);switch((int)(score/10)) ? ?//switch((int)score/10)出现严重错误
{ ?
case 10: ?
case 9:printf("A(最好)\n");break; ?
case 8:printf("B(优秀)\n");break; ?
case 7:printf("C(良好)\n");break; ?
case 6:printf("D(及格)\n");break; ?
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:printf("E(不及格)\n");break;
default:printf("Error!\n");
}
}
参考资料:百度百科 switch (计算机语言关键字)
JAVA中switch能否用在byte上?能否用在long上?能否用在string上?
switch后面的括号里面只能放int类型的值,注意是只能放int类型,但是放byte,short,char,和枚举(enum)。
因为byte,short,char,,可以隐式的转换为int类型,不是说就可以放它们。说白了,你放的byte,short,char,枚举(enum),然后他们会自动转换为int类型(宽化,自动转换并且安全),其实最后放的还是int类型
所以long,
string不行
JAVA中SWITCH为什么不能使用LONG型作参数?
交换机在JAVA中不能使用long的根本原因是长时间转换为int将失去精度,导致数据不准确,因此JAVA交换机具有不允许长的逻辑规则。
switch语句中的变量类型可以是:byte,short,int或char。从Java SE 7开始,交换机支持字符串String类型,case标记必须是字符串常量或文字。
扩展资料
Switch案例在java中有以下规则:
switch语句可以有多个case语句。每个案例后跟一个值和一个要比较的冒号。
case语句中值的数据类型必须与变量的数据类型相同,并且只能是常量或文字常量。
当变量的值等于case语句的值时,case语句后面的语句开始执行,直到break语句出现跳出switch语句。
遇到break语句时,switch语句终止。程序跳转到switch语句后的语句执行。 case语句不必包含break语句。如果没有发生break语句,程序将继续执行下一个case语句,直到发生break语句。
switch语句可以包含一个默认分支,它通常是switch语句的最后一个分支(可以是任何地方,但建议在最后一个)。当case语句没有值且变量的值相等时,执行Default。默认分支不需要break语句。
参考资料:百度百科-JAVA
前的Java的switch语句能判断String 类型吗????
在Java7之前,switch只能支持 byte、short、char、int或者其对应的封装类以及Enum类型。在Java7中,呼吁很久的String支持也终于被加上了。
例如,下面是一段switch中使用String的示例代码。
public class Test {
public void test(String str) {
switch(str) {
case "abc":
System.out.println("abc");
break;
case "def":
System.out.println("def");
break;
default:
System.out.println("default");
}
}
}
在switch语句中,String的比较用的是String.equals,因此大家可以放心的使用。
需要注意的是,传给switch的String变量不能为null,同时switch的case子句中使用的字符串也不能为null。
为什么要有这些非null的限制呢?其实,我们只要将这段代码反汇编出来,看一下底层到底是如何实现的,就可以明白了。下面是汇编出来的代码。
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."":()V
4: return
public void test(java.lang.String);
Code:
0: aload_1
1: astore_2
2: iconst_m1
3: istore_3
4: aload_2
5: invokevirtual #2; //Method java/lang/String.hashCode:()I
8: lookupswitch{ //2
96354: 36;
99333: 50;
default: 61 }
36: aload_2
37: ldc #3; //String abc
39: invokevirtual #4; //Method java/lang/String.equals:(Ljava/lang/Object;)Z
42: ifeq 61
45: iconst_0
46: istore_3
47: goto 61
50: aload_2
51: ldc #5; //String def
53: invokevirtual #4; //Method java/lang/String.equals:(Ljava/lang/Object;)Z
56: ifeq 61
59: iconst_1
60: istore_3
61: iload_3
62: lookupswitch{ //2
0: 88;
1: 99;
default: 110 }
88: getstatic #6; //Field java/lang/System.out:Ljava/io/PrintStream;
91: ldc #3; //String abc
93: invokevirtual #7; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
96: goto 118
99: getstatic #6; //Field java/lang/System.out:Ljava/io/PrintStream;
102: ldc #5; //String def
104: invokevirtual #7; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
107: goto 118
110: getstatic #6; //Field java/lang/System.out:Ljava/io/PrintStream;
113: ldc #8; //String default
115: invokevirtual #7; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
118: return
}
估计有些同学懒得看这些汇编,其实把上面的汇编代码用Java写出来就是下面的样子了。
写到这里,大家应该能明白为什么不能用null了吧。
public class Test {
public void test(String str) {
int i = -1;
switch(str.hashCode()) {
case 96354: // "abc".hashCode()
if (str.equals("abc")) {
i = 0;
}
break;
case 99333: // "def".hashCode()
if (str.equals("def")) {
i = 1;
}
break;
default:
break;
}
switch(i) {
case 0:
System.out.println("abc");
break;
case 1:
System.out.println("def");
break;
default:
System.out.println("default");
}
}
}
如果switch传入的null,那么在运行时对一个null对象调用hashCode方法会出现NullPointerException。
如果switch的case写的是null,那么在编译时无法求出hashCode,因此在编译时就会报错了。
switch支持String只是一个语法糖,由javac来负责生成相应的代码。底层的JVM在switch上并没有进行修改。
java 中switch能用string类型的吗
Java JDK1.8和JRE1.8以后switch可以用String类型了,
我给你个例子,你看看吧.
public?class?CCC?{
?public?static?void?main(String[]?args)?{
??String?s="abc";
??int?a=0;
??switch(s){
???case?"a":a=1;break;
???case?"ab":a=2;break;
???case?"abc":a=3;break;
??}
??System.out.println(a);
?}
}
运行结果
3