问题引入:

byte a=1;
byte b=3;
byte c=a+b;
byte d=1+3;

为什么byte c=a+b;这个不对。byte d=1+3;这个却没有错误

解答:

+操作会将变量转成int
1+3编译器会自动转成4

做加法运算的时候,数据类型是首先转变成int

这样就对了:byte c=(byte)(a+b);

为什么 short s=1; s=s+1; 在编译是会有问题提示说不可以将int类型转换成short类型。但是short s=1; s+=1;就没有上述的问题呢?难道s+=1 跟s=s+1;不等价吗?

不等价,s+=1;s++等运算符是自身相加,类型不变,而s=s+1;其实是分两步的,第一步先算s+1;这里1是整型,向大兼容,得出结果是整型,然后再把这个整型赋值给s,这当然是不行的,所以必须得转换.但是反过来,如果s是浮点型的话,会怎样呢,是的,不需要强转,因为向大兼容。

Java中涉及byte、short和char类型的运算操作首先会把这些值转换为int类型,然后对int类型值进行运算,最后得到int类型的结果。因此,如果把两个byte类型值相加,最后会得到一个int类型的结果。如果需要得到byte类型结果,必须将这个int类型的结果显式转换为byte类型。计算机中数值进行运算的时候可能会发生溢出错误。例如,byte型的变量,共占8个2进制位,其值的范围是:-128~127,如果给byte赋值的数在-128-127之间,那么可以直接赋值,否则必须进行强制转换,否则出错。若两个值为127的byte型变量相乘,结果会怎么样呢?所以,像byte这种值域很小的变量类型,要限制保存结果用的变量的类型。
byte a=1;
byte b=3;
byte c=(byte)a+b;
1+3的结果在-128~127之间,所以没有溢出,也就没有发生错误,如果改成byte d=127+127;就会发生错误了,空间不能容下这么大的数。其实这个与相关的编译器有关的。

byte,short,char之间不会互相转换,三者在计算时先会转换为int类型, char类型数据和byte,short,int或long运算的结果总是int类型数据

byte b1 = 67;
byte b2 = 89;
byte b3 = (byte)(b1 + b2);

用补码表示:
(67)10 = (0000000000000000000000001000011)2
(89)10 = (0000000000000000000000001011001)2

两者相加,得:(0000000000000000000000010011100)2
由于已经超出了byte的范围,截去前面24位,得:(10011100)2

将其转化为原码:【10011100】补
              = -(【0011100】反 + 1)
              = -(1100011 + 1)
              = -1100100

转化为十进制即为-100

我们可以借助字面量这个词来帮助我们理解赋值的过程:

字面量是对信息、数据的一个表述。或者说是我们直接用来表述的数值或字符。
比如:byte a=64; //其中64就是字面量。
1,2,64等等是整数字面量,它们默认是int型。而1.2,3.4等等是浮点字面量,默认是double型。
不是默认类型字面量,要在其后加上类型标识。
比如:46+7.8f
对于整数字面量,Java编译系统会自动匹配字面量的类型。
当一个int型字面量的值被赋给一个byte 或short型的变量时,如果字面量的值没有超过对应类型的范围时,就不会产生错误。然而,其他类型的字面量(如:short,long,char,double等等)是没有这个功能的。

java类型转换易犯的错误相关推荐

  1. Android4.0 Design之UI设计易犯的错误2

    想成为Android的杰出开发工程师,不懂得Android的设计规则怎么可以,Android4.0问世后谷歌公司为Android程序员规范了一系列的设计原则,不要再盲目的模仿IOS的设计了,因为And ...

  2. css html 对错号,HTML_DIV+CSS编码时易犯的错误,CSS+DIV是网站标准(或称“WEB - phpStudy...

    DIV+CSS编码时易犯的错误 CSS+DIV是网站标准(或称"WEB标准")中常用的术语之一,通常为了说明与HTML网页设计语言中的表格(table)定位方式的区别,因为XHTM ...

  3. 7个跑步易犯的错误和解决办法

    似乎所有人都认为跑步是一种非常简单的锻炼方式,然而,其实不然,跑步涉及到许多专业知识.错误的跑步,不仅影响锻炼效果,而且还容易导致受伤. 1.鞋子不合适 问题:穿着太旧的跑步鞋或者类型不合适的运动鞋容 ...

  4. Linux管理员易犯的错误

    对于初入linux的管理员们来说,迁移到Linux是一场噩梦,而且在Linux管理中稍微不小心就会出错,如果不避免这些错误的话就会给我们的网络和系统带来风险,那么我们现在就去看看Linux管理员易犯的 ...

  5. 外汇资金管理上易犯的错误

    赚钱是做外汇投资的最终目的,为了获取更多的钱,首先管理好自己手中的钱是每位投资者走向成功的必由之路,能够正确冷静科学合理的运用资金,很大程度上区分了一位投资者是否优秀.一般而言,在外汇资金管理方面投资 ...

  6. 5个golang中易犯的错误

    点击上方蓝字关注我们 To err is human,to forgive divine. -Alexander Pope 初学golang我们经常会犯一些错误,虽然它们不会产生类型检查的异常,但是它 ...

  7. javascript中易犯的错误有哪些

    javascript中易犯的错误有哪些 一.总结 一句话总结: 比如循环中函数的使用 函数中this的指向谁(函数中this的使用) 变量的作用域 1.this.timer = setTimeout( ...

  8. Linux初到者五个最易犯的错误

    随着Ubuntu 10.10的到来,为你的业务试用Linux的理由列表又变长了一些.此款自由与免费的操作系统现在变得空前用户友好,而又提供了其竞争对手所不具备的安 全性等其他优势.如果你是新Linux ...

  9. Java入门教程:Java初学者容易犯的错误

    万事开头难,Java编程的初学者常常会遇到各种各样的问题.对于自学的读者来说,则是需要花费更多的时间.精力来解决这些问题,而且一旦遇到的问题几天都得不到解决,往往会带来很大的挫败感. 所以本节介绍一些 ...

最新文章

  1. proxmoxve打造云桌面_AIO攻略 | 桌面云是如何解决外设问题的?
  2. laravel数据库操作
  3. cpu java poi 导出_java基于poi导出excel透视表代码实例
  4. oracle 中大于等于_针对oracle安装参数调整方法
  5. jsp调试,异常行数不匹配
  6. 华为云发布国内首个 AI 模型市场,加速企业 AI 应用落地
  7. koolshare离线插件下载_还记得那个提速8倍的IDEA插件吗?VS Code版本也发布啦
  8. mvc 调试 f12 浏览器闪退
  9. Atitit jsr规范有多少个  407个。Jsr规范大全
  10. php木马在线查杀_网站木马监控查杀扫描 ASP木马 PHP木马上传拦截
  11. 第07章 文本信息提取
  12. 笔记本自带键盘与IDEA快捷键冲突
  13. anaconda python更换清华源
  14. 【云服务器 ECS 实战】专有网络 VPC、弹性网卡的概述与配置
  15. java里字符的大小写转换
  16. 1.1亿!罗永浩首场直播爆卖背后:放下面子赚钱,才是成年人最大的体面
  17. 图的表示:如何存储微博、微信等社交网络中的好友关系?
  18. 前端常考react面试题(持续更新中)
  19. 2022-2023级中国石油大学(北京)MBA提前面试已开启-文都管联院
  20. linux服务器配置参考文献,基于Linux的DNS服务器安装与配置

热门文章

  1. 操作系统内核参数semmni在节点上没有适当的值应为=128找到=0
  2. 算法其实很简单—克鲁斯卡尔算法
  3. 中石油子公司复牌 回购溢价推动上涨
  4. 为什么写《大数据架构详解》这本书
  5. c语言贪吃蛇控制台版
  6. 台式计算机cpu是什么,台式机cpu多少为正常
  7. 医院数字时钟系统-智慧医院|医院数字化转型
  8. 什么电脑能带动matlab,大三女生想换电脑:轻便(易携带)性能(需要office Matlab AE等软件)好看 求推荐?经济类研究生有没有必要换windows笔记本...
  9. 在多标签分类中,准备mulan开源软件所需要的.arff和.xml数据的方法
  10. PostGIS几何类型及常用函数