switch(整形表达式)中的整形表达式为什么不能是long型? 在C/C++中,long型是完全允许的。float、double型不允许,很好理解,因为没有办法精确比较。但long型为什么就不行呢? 谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 只能是 enum byte short int char 非也,之前String也不能作为switch的条件,jdk1.7中不照样加了这个功能! Java 7加这个功能是脑子发热 背后没有原因吗 switch 语句被设计成跳转表,表面上看支持很多类型,但实际上只有一种,那就是 int 型,小于 int 的类型都会自动提升成 int。编译时,switch (abc) 语句被当成 goto addrs[abc],而这一句被实现成机器指令时就成为 表首地址 + 偏移量,所以一个 abc 其实代表了一个偏移地址,在 32 位机器上自然是 32 位。(当然 switch 语句也可以不实现为跳转表)如果想用 64 位的 long,可以强制转换(截断)成 int,或者使用 if-else。 感觉是因为long的范围太大了,跳着太累,^_^ 嗯 switch应该很喜欢enum 一般都不会太多 呵呵 有一定道理 谢谢你的回答不过 有一个小疑问 1. 在C/C++中 long型是可以的 而且long是可以实现为不止4 bytes的 这作何解释 2. 假设将switch实现为跳转 在跳转之前必须进行比较 以确定跳到哪里去 所以 我 感觉是不是在比较这一步出的问题 按照 x86 的 ABI,long 被实现为处理器字长的大小,而跳转表的跳转无非就是 jmp *JMPTBL(, %eax, 4) 这样的指令,偏移必须能装到寄存器里才好…… 如果不能,就很难用跳转表实现了,虽然 switch 并不一定非要用跳转表实现…… Java 必须在32位机器和64位机器上移植,需要考虑兼容性 switch 是面向过程语言中的语法,在面向对象中应尽可能少的使用 facebook一道面试题,求效率算法 middleobject.jar 包有什么用? 哪位高手能给我解释一下这个Java程序的运行结果? 关于一个日志文件的读取,急等解决方案,小弟非常感谢 100分求一道面试题的答案 如何用JAVA实现windows资源管理器的功能? 提示已定义类型Employee错误 这样不是挺浪费空间吗? 关于DB2数据库的连接.为什么总说NO suitable driver. 有什么根据表的内容长度自动设置jtable列宽的方法? 获取网页验证码 java 为啥编译不通过?
嗯 switch应该很喜欢enum 一般都不会太多 呵呵
不过 有一个小疑问 1. 在C/C++中 long型是可以的 而且long是可以实现为不止4 bytes的 这作何解释
2. 假设将switch实现为跳转 在跳转之前必须进行比较 以确定跳到哪里去 所以 我
感觉是不是在比较这一步出的问题