黑马程序员技术交流社区

标题: switch语句能否作用在byte上,能否作用在long上 [打印本页]

作者: 张森    时间: 2013-1-3 11:08
标题: switch语句能否作用在byte上,能否作用在long上
switch语句能否作用在byte上,能否作用在long上。求分析
作者: 刘文超    时间: 2013-1-3 11:42
本帖最后由 刘文超 于 2013-1-3 11:54 编辑

lz你好,我们又见面了、
在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。
但是我们可以将long型显示转换为int的,如截图中switch((int) l);

敬上代码一段,截图一张:
  1. package org.qyx.online;

  2. public class TestSwitch {

  3.         /**
  4.          * @category switch语句能否作用在byte上,能否作用在long上?
  5.          * @author 刘文超
  6.          */
  7.         public static void main(String[] args) {
  8.                 String name="";
  9.                 byte b=1;
  10.                 switch(b){
  11.                 case 1:
  12.                         System.out.println("byte");
  13.                         break;
  14.                 }
  15.                
  16.                 short s=1;
  17.                 switch(s){
  18.                 case 1:
  19.                         System.out.println("short");
  20.                         break;
  21.                 }
  22.                
  23.                 long l=1;
  24.                 switch((int)l){
  25.                 case 1:
  26.                         System.out.println("long");
  27.                         break;
  28.                 }
  29.                
  30.                 switch(l){
  31.                 case 1:
  32.                         System.out.println("long");
  33.                         break;
  34.                 }
  35.         }

  36. }
复制代码

AAAAA.jpg (40.12 KB, 下载次数: 136)

AAAAA.jpg

作者: 克零岚    时间: 2013-3-1 09:57
楼上的回答很好了,这个题经常出现在面试题里面,就是因为byte能够隐式的转换为int类型,而long型不能够转换。顺便补充一下,关于基本数据之间的类型转换,java中分为两种,自动类型转换(就是隐式转换)和强制转换,自动类型转换必须在相同数据类型的数据之间进行,并且必须是有低精度类型向高精度类型转换,很显然byte向int转换时会自动发生。下面给出数据精度的排列:(精度由低到高排列)byte——>short——>int——>long——>float——>double




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2