日期:2014-05-20  浏览次数:20681 次

java整数类型-byte、short、int、long
今天不知道哪根筋搭错了,写了个测试程序,很简单,希望进来的朋友帮忙解答一下!

在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类型的数据没有进行运算,这是为什么?

------解决方案--------------------
看在40分的份上,我说2句:
你的第一跟第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;第三个开始正常了,不知道你前面是怎么想的。。。

------解决方案--------------------
LZ 呀~~~仔细点哦
------解决方案--------------------
探讨

引用:
实际上switch只能是int类型,其他的short char byte之所以能够使用是因为其转换成了int


你的意思是,switch表达式中的之所以可以使用short char byte类型的值,是因为自动转型?但是很多书上都说:switch表达式中的值可以为short char byte int,如果上述是因为自动转型的话,那么对于long类型的数值来说……

------解决方案--------------------
可以用枚举enum和switch搭配使用,达到你想要的switch(long)的效果。
具体见Thinking in java 的第4(5?)章^^^^^^
------解决方案--------------------
long通过强制类型转换为int后,就不再是long,所以switch表达式中还是只能使用short char byte int类型的值