switch为什么只能用int,short,byte,char,而不能用long,String

alabucunzai 2008-04-22 09:27:39
switch为什么只能用int,short,byte,char,而不能用long,String
...全文
1934 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
三界五行外 2012-06-06
  • 打赏
  • 举报
回复
妈的,手贱,挖坟了。本来只是来查找为啥switch不能用long的。
三界五行外 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 的回复:]

啊 不对呀 改成了Integer Short Byte Character(没有Char类) 照样运行呀

Java code
public static void switchDemo(){
Integer month = 8;

switch(month) {
case 1: System.out.pr……
[/Quote]
这个估计是自动封装、解封的原因,
JDK1.5以后可以自动将基本类型封装成包装类型,自动将包装类型解封成基本类型。或者说,在JDK1.5以后,基本类型和包装类型是一样的了。
panj361273462 2011-08-04
  • 打赏
  • 举报
回复
0.0 ~~s ya
liuyuxing19877 2011-04-15
  • 打赏
  • 举报
回复
byte ,char,short类型可以自动转化为int类型,即从下到上自动转化,而long,String型变量所占得空间比int大,不能自动转化为int类型。switch中只能是int型或者枚举类型
zidanexun 2009-06-29
  • 打赏
  • 举报
回复
顶,面试确实对基础知识考察很严格,fighting
lei55022033 2009-06-01
  • 打赏
  • 举报
回复
switch 只能使用 int 类型, short、byte在计算时候默认就是int型的吧。至于char我想应该是转换的。这个我也想知道为什么char可以。
short s = 100;char c = 100;byte b = 100;都不会报错的。会不会给这个有关。
imi00 2008-09-01
  • 打赏
  • 举报
回复
类c
GGMMYQL 2008-09-01
  • 打赏
  • 举报
回复
热带鱼2020 2008-08-31
  • 打赏
  • 举报
回复
啊 不对呀 改成了Integer Short Byte Character(没有Char类) 照样运行呀

	public static void switchDemo(){
Integer month = 8;

switch(month) {
case 1: System.out.println("January"); break;
case 2: System.out.println("February"); break;
case 3: System.out.println("March"); break;
case 4: System.out.println("April"); break;
case 5: System.out.println("May"); break;
case 6: System.out.println("June"); break;
case 7: System.out.println("July"); break;
case 8: System.out.println("August"); break;
case 9: System.out.println("September"); break;
case 10: System.out.println("October"); break;
case 11: System.out.println("November"); break;
case 12: System.out.println("December"); break;
default: System.out.println("Invalid month.");break;
}
}


面试题我蒙错了~
zenny_chen 2008-08-31
  • 打赏
  • 举报
回复
原因很简单。因为long类型在Java中是64位的,因此很难映射到一个具体机器的寄存器中,而这对于Java后台语义着色而言是比较麻烦的。而String不能作为一个基本类型的常量来对待,它是一个对象。哪怕你直接写"Hello, world",Java虚拟机在执行时也会为它创建对象。因此不能作为常量。
hello_holly 2008-08-31
  • 打赏
  • 举报
回复
switch后只能用byte,short,int,char,jdk5.0以后,还可以用枚举类型,这是java的规范,呵呵
热带鱼2020 2008-08-31
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 little06 的回复:]
我想楼上说的对
基于执行效率来看吧,所以没做String之类的Switch
如果一定要用string ,用if else 也可以做
[/Quote]
好~
------------------------------------------------
另外我上会面试时 选项里 还一个Integer 还好我当时不会 也没蒙Integer~
热带鱼2020 2008-08-31
  • 打赏
  • 举报
回复
switch之后括号内的表达式只能是整型(byte、short、char和int)、枚举型或字符型表达式,
不能是长整型long 或其他任何类型。关于枚举型将在后面详细介绍。

http://book.51cto.com/art/200709/55571.htm

热带鱼2020 2008-08-31
  • 打赏
  • 举报
回复
今天我也捉摸这倒面试题来着~
nyzlhao 2008-08-31
  • 打赏
  • 举报
回复
顶,我也找原因
rabbit_zizhu 2008-08-31
  • 打赏
  • 举报
回复
一楼是书上的原话,顶!!
  • 打赏
  • 举报
回复
你转换下再用,呵呵,总可以的!
weiqiyiji 2008-08-31
  • 打赏
  • 举报
回复
规定
wufongming 2008-08-31
  • 打赏
  • 举报
回复
因为这是java ,如果是c#就可以用string
bocheng123 2008-08-31
  • 打赏
  • 举报
回复
楼主,有见地,好。怕什么?是吧?不懂就问,是吧?
加载更多回复(13)

62,632

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧