JAVA的数据类型转换

1. 自动类型转化
  • 会将占用内存小的数据类型自动转化为占用内存大的数据类型。如:
    int x=1;byte y=2;x=x+y;会自动将byte类型的数据y转化为int型然后相加;

  • byte/short/char类型之间可以进行运算,但会自动类型转换为int类型后才进行运算。
    如:byte num1=40,num2=50,sum;sum=num1+num2;会提示错误。因为运算以后其结果已经是int类型了,大范围的数据类型不能自动转化为小范围数据类型。

  • 想显示字符类型的具体数值时,加一个int类型的0;这是利用自动类型转化的规则。如:

    System.out.println('A'+0);  //查看ASCII表值,’0‘--48   ;’A'--65  ;‘a'--97
    System.out.println('中'+0);//查看Unicode表值,在Unicode表中开头的128个值保持和ASCII表相同
    
2. 强制类型转化
  • 格式:变量名=(要转换的数据类型)变量名或运算公式;
    如int x=1;float y=2.1;x=(int)(x+y);原本x+y会自动转化为float类型,由于是为int类型的x赋值,float并不能自动转化为int类型,因此使用强制类型转化
    强制类型转化会导致数据丢失,精度损失(不是四舍五入,而是直接丢弃),并且不可逆;
3. 编译器的常量优化
byte num1=40,num2=50,sum;
sum=(byte)(num1+num2);//需要进行强制数据类型转化
sum=40+50;//不需要强制类型转化
  1. 为什么num1在定义时int类型的40可以直接给num1赋值呢?
    ——对于byte、short、char三种数据类型,只要右侧数据没有超出数据类型的范围,那么Javac就会自动隐含地在数据之前补上强制类型转换,即byte num1=40会被编译器改写为byte num1=(byte)40;
    ——如果超过了左侧数据范围,编译器直接报错
  2. 为什么sum=40+50不需要进行强制类型转换;sum=(byte)num1+num2却需要?
    ——在为变量赋值时,如果右侧表达式只有常量,不含有变量,那么,javac编译器会将常量表达式的结果自动进行强制类型转换。一旦表达式含义变量,就必须手动地进行强制类型转化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值