IBM实习生笔试题目(1)

本文深入探讨了Java中switch语句的使用场景,特别是对于不同数据类型的适用性。详细解释了如何将byte、short、char等类型用于switch语句,并通过实例展示了Java类型转换规则及byte数据类型的溢出处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.关键字switch可以作用在以下哪些数据类型上?

       A. int       B. char              C. string         D. byte           E. long           F. short

答案:在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体)。整数表达式可以是int基本类型或者是Integer包装类型;由于byte,short,char都可以隐含转换为int所以这些类型以及这些类型的包装类型都可以作为switch的表达式。而,long和String类型则不符合switch的语法规定且无法被隐式转换为int类型。所以它们不能作用于switch语句中。答案是 A B D F

bonus:(参考:http://mrwlh.blog.51cto.com/2238823/1109364

public class test {
   public static void main(String[] args){
	   byte a = 127;
	   //byte a = 128;此时报错
	   System.out.println(a);
   }
}
byte的取值范围是-128~127.(int也类似,不是从0开始的)

java中类型转化问题(低精度向高精度转换)即byte/short/char转换为int

  byte b = 2,e = 3;

  byte f = b + e;//产生编译的错误,因为无法隐式将int转为byte.

应该改为byte b = 2, e = 3;byte f = (byte)(b + e);//注意括号的位置

对于short s1 = 1,s1 = s1 + 1;//编译器提示强制转换类型的错误。在加法的时候会转为int处理,而int 无法隐式转换为short

short s = 1;s += 1;//是正确的,因为+= 是java语言规定的运算符,java编译器会对它进行特殊的处理,因此可以正确编译。

总结:

java会将short / byte / char4种类型数运算后的结果自动转换为int类型因为int的范围比它们都大。

再考虑byte的转换问题:

public class test {
   public static void main(String[] args){
	   byte a = 127;
	   byte b = 2;
	   byte f = (byte) (a + b);
	   System.out.println(f);
   }
}

输出结果是-127

网络定义:

所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。(注意符号位!!)
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
原码10010= 反码11101 (10010,1为符号码,故为负)
(11101) 二进制= -13 十进制
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。(正数三码一致,负数三码不一致)
计算机以补码存储数字。所以,上面的计算结果应该为01111111+00000010 = 10000001,补码为10000001的数字为 -127(注意符号位)。
byte转为int的自定义函数。输出格式好像有点问题。
import java.io.*;
public class test {
   public static void main(String[] args)throws Exception{
	   int i = 65535;
	   byte[] b = intToByteArray(i);
	   for(byte bb : b){
		   System.out.println(bb + " ");
	   }
   }
   public static byte[] intToByteArray(int i){
	   byte[] result = new byte[4];//int32byte8
	   result[0] = (byte)((i >> 24) & 0xFF);//不改变i的值,向右移24位,相当于除去2的24次方
	   result[1] = (byte)((i >> 16) & 0xFF);//& 按位与计算
	   result[2] = (byte)((i >> 8) & 0xFF);
	   result[3] = (byte)((i & 0xFF));
	   return result;
   }
   public static byte[] intToByteArray2(int i)throws Exception{
	   ByteArrayOutputStream buf = new ByteArrayOutputStream();
	   DataOutputStream out = new DataOutputStream(buf);
	   out.writeInt(i);
	   byte[] b = buf.toByteArray();
	   out.close();
	   buf.close();
	   return b;
   }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值