今天不知道哪根筋搭错了,写了个测试程序,很简单,希望进来的朋友帮忙解答一下!在java中整数类型有byte、short、int、long
在结构switch(表达式),表达式的值只能是int、byte、short、char问题1:为什么long型的数据不能作为switch中表达式的值,如果写个测试程序的话会报:精度可能丢失的错误。这个你可能说是java虚拟机内部就这个规定的,如果这个的话,那我们看下面的问题。
问题2:
public class JavaInt{
public static void main(String[] args){
byte b = 0;
short s = 1;
int i = 2;
long l = 3L;
int b1 = 0;
int s1 = 0;
switch(b){
case 0:
b1 = b + 1;
break;
case 1:
b1 = (int)(b + 2);
break;
case 2:
b1 = (int)(b + 3);
break;
case 3:
b1 = (int)(b + 4);
break;
default:
System.out.println("0===有错!");
}
System.out.println(b+"");
switch(s){
case 0:
s1 = s + 1;
break;
case 1:
s1 = (int)(s + 2);
break;
case 2:
s1 = (int)(s + 3);
break;
case 3:
s1 = (int)(s + 4);
break;
default:
System.out.println("1===有错!");
}
System.out.println(s+"");
switch(i){
case 0:
++i;
break;
case 1:
i = i + 2;
break;
case 2:
i = i + 3;
break;
case 3:
i = i + 4;
break;
default:
System.out.println("2===有错!");
}
System.out.println(i+"");
switch((int)l){
case 0:
++l;
break;
case 1:
l = l + 2;
break;
case 2:
l = l + 3;
break;
case 3:
l = l + 4;
break;
default:
System.out.println("3===有错!");
}
System.out.println(l+"");
}
}该测试程序的输出结果为:
0
1
5
7
但是我感觉结果应该是:
1
3
5
7
就实验结果来看,也就是说byte和short类型的数据没有进行运算,这是为什么?
在结构switch(表达式),表达式的值只能是int、byte、short、char问题1:为什么long型的数据不能作为switch中表达式的值,如果写个测试程序的话会报:精度可能丢失的错误。这个你可能说是java虚拟机内部就这个规定的,如果这个的话,那我们看下面的问题。
问题2:
public class JavaInt{
public static void main(String[] args){
byte b = 0;
short s = 1;
int i = 2;
long l = 3L;
int b1 = 0;
int s1 = 0;
switch(b){
case 0:
b1 = b + 1;
break;
case 1:
b1 = (int)(b + 2);
break;
case 2:
b1 = (int)(b + 3);
break;
case 3:
b1 = (int)(b + 4);
break;
default:
System.out.println("0===有错!");
}
System.out.println(b+"");
switch(s){
case 0:
s1 = s + 1;
break;
case 1:
s1 = (int)(s + 2);
break;
case 2:
s1 = (int)(s + 3);
break;
case 3:
s1 = (int)(s + 4);
break;
default:
System.out.println("1===有错!");
}
System.out.println(s+"");
switch(i){
case 0:
++i;
break;
case 1:
i = i + 2;
break;
case 2:
i = i + 3;
break;
case 3:
i = i + 4;
break;
default:
System.out.println("2===有错!");
}
System.out.println(i+"");
switch((int)l){
case 0:
++l;
break;
case 1:
l = l + 2;
break;
case 2:
l = l + 3;
break;
case 3:
l = l + 4;
break;
default:
System.out.println("3===有错!");
}
System.out.println(l+"");
}
}该测试程序的输出结果为:
0
1
5
7
但是我感觉结果应该是:
1
3
5
7
就实验结果来看,也就是说byte和short类型的数据没有进行运算,这是为什么?
你的第一跟第2个输出分别是 b跟 s,显然你想输出的是b1,s1,
b1 = b + 1;
这个对b有什么影响?完全没有。除非你这样 b = (byte)(b+1);
同理
s1 = (int)(s+2);
这个修改的只是s1的值,又不是s。你可以这样s+=2 或则s = (short)(s+2);
i = i + 3;第三个开始正常了,不知道你前面是怎么想的
你的意思是,switch表达式中的之所以可以使用short char byte类型的值,是因为自动转型?但是很多书上都说:switch表达式中的值可以为short char byte int,如果上述是因为自动转型的话,那么对于long类型的数值来说同样可以通过强制类型转换啊,如果是这样的原因的话,教科书上也应该写switch表达式中的值可以为short char byte int long啊?
java底层是按32位计算的,可是short char byte 都不是32位的,所以计算这些类型的时候自动转换为int型。
书上不可能跟你提到太过于复杂的内部问题,让你懂得究竟哪种类型可以就行了呗。
具体见Thinking in java 的第4(5?)章^^^^^^