千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  行业资讯  > 千锋大数据培训分享:自加自减运算规则下的思考

千锋大数据培训分享:自加自减运算规则下的思考

来源:千锋教育
发布人:千锋老师
时间: 2018-09-19 16:23:00 1537345380

  来到千锋大数据工程师培训已一个半月,收获颇丰。这一路上走走停停,顺着少年脱发的痕迹,认识到自己的成长!这两天做SSM框架整合,因刚开始接触这部分知识,配置xml文件,导出各种库,操作有些繁杂,所以有点摸不到头绪。好在随着第一个轮增删改查功能的实现,意外发现这个框架其实简化了很多代码。从前200行代码的不解,到中间几百行的信手拈来,真的是实现了灵魂的洗涤,质的飞升! 近期学习了自加自减,那么接下来便和大家分享下这部分知识。

大数据 (5)

  一、关于自加自减引起的运算规则思考

  1.代码public classMain {public static void main(String[] args) { byte a =4; byte b =6; byte c = a + b;}}以上代码在编译过程中就会报错。

  2.分析:为什么byte a = 4;就不会报错?因为byte是一个字节,八个二进制位,此时其范围为-128 ~ +127,所以4在其范围内,所以可以被赋值。一旦这个数值超过了127,那么编译就会报错了。为什么byte c = a + b;就报错呢?这是java的机制导致的,java在对byte这种类型进行“运算”时,会将其转换为int类型,两个int类型相加,赋值给byte类型肯定会报错的。为什么byte = 3 + 4;又不会报错呢?跟第一个一样3+4是常量的计算,会优先执行,执行结果再赋值给byte,此时判断数值是否满足该类型范围,满足就直接赋值了。

  3.总结。两个变量相加,先对类型进行提升,然后运算,再将运算结果赋值。两个常量相加,先计算常量数值,然后判断是否满足类型范围,再赋值。再加一例:

  在Java中,两个byte类型数据相加为什么会报错呢?byte b=4;byte b1=3;byte b2=7;b=b1+b2; //计算b,错误b=b1+7; //计算bbyte b=3+7; //计算。

  二、运算符对基本类型的影响

  当使用+、-、*、/、%运算符对基本类型进行运算时,遵循如下规则:只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型;否则,只要两个操作数中有一个是float类型的,另一个将会被转换成float类型,并且结果也是float类型;另外,只要两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型;再者,两个操作数(包括byte、short、int、char)都将会被转换成int类型,并且结果也是int类型。

  当使用+=、-=、*=、/=、%=、运算符对基本类型进行运算时,遵循如下规则:

  运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,且运算结果与运算符左边数值类型相同。

  了解了这些,我们就能解答下面这个常考的面试题了。请看:引用

  short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错?乍一看,觉得它们都应该没有错误,可以正常运行。我们来写个例子试试:public class PrimitiveTypeTest {public static void main(String[] args) {short s1 = 1;// 这一行代码会报编译错误 // s1 = s1 + 1;// 这一行代码没有报错s1 = 1 + 1; // 这一行代码也没有报错s1 += 1;}}。从例子中我们可以看出结果了。利用上面列举的规律,也很容易解释。在s1=s1+1;中,s1+1运算的结果是int型,把它赋值给一个 short型变量s1,所以会报错;而在s1+=1;中,由于是s1是short类型的,所以1首先被强制转换为short型,然后再参与运算,并且结果也是short类型的,因此不会报错。那么,s1=1+1;为什么不报错呢?这是因为1+1是个编译时可以确定的常量,“+”运算在编译时就被执行了,而不是在程序执行的时候,这个语句的效果等同于s1=2,所以不会报错。前面讲过了,对基本类型执行强制类型转换可能得出错误的结果,因此在使用+=、 -=、*=、/=、%=等运算符时,要多加注意。

  再举一例:byte数据类型。给byte数据类型赋值的时候很多时候会出现问题,说是Type mismatch: cannot convert from int to byte,这是因为byte赋值的右侧不能出现变量。如例子:byte a=4;a=a+4;这是程序就会出现上述的问题,因为java中常量的默认类型都是int类型的,当进行赋值操作的时候,如果像这个一样,赋值给byte类型的数据,这是系统内部会先判断这个数据是否超过byte类型的最大范围(-128~127),如果没有超过则可以正常赋值,超过了会报错,但当程序执行到a=a+4这一句时,系统不能判断a+4是否在范围内,有的人会问了,a=4,a+4=8,是在范围内啊,但是可要知道了,这里的a是一个变量,变量顾名思义就是数值可以变化的量,说不定哪天有人把a=4这句改为a=127,其中short类型和byte类型是一样的,如果赋值变量右侧有变量存在,都有可能会报错,但是int类型不是这样的,如果右侧有变量,而且超过了int类型所涵盖的最大值,它就不会报错,只会溢出,还有一个符号要注意+= -= *= /=

  这里就说一个+=我们都知道a+=2;和a=a+2;效果是一样的,但这不是完全正确的,例如:short s=4;s+=2;//s=s+2;如果写这句就会出错,原因和上面是一样的,赋值符号右侧有变量了,但是s+=2;这句话就是可以的,因为执行这句话的时候系统会先判断付给s的数是否超过它的范围,如果超过了,报错,没超过,强制类型转换之后进行赋值,所以就知道了,s+=2,这句话其实是等同于(在s是short类型时)s=(short)(s+2)System.out.println(s);

  由此是对于运算规则的思考,那么说一说在千锋大数据培训班上的课堂经验总结:

  首先,一定要注意休息。如果晚上睡不好觉,白天听课犯困,这是致命的。这里一个月能讲大学一年的知识,每一天甚至每一节课一旦没听,就很容易跟不上课程。

  其次,要在一天的学习之后,多敲代码增加熟练度,最好在笔记上写上自己的理解,有疑问就马上解决。当日事当日毕。

  还有,在作业不太多的时候,多在编程网站上练习练习算法程序。感觉算法是精尖技术,多掌握一点就多一分实力。

  最后,希望所有人都能保持乌黑明亮的秀发。革命尚未成功,同志仍需努力。

  学习大数据开发,可以参考千锋提供的大数据学习路线,该学习路线提供完整的大数据开发知识体系,内容包含Linux&&Hadoop生态体系、大数据计算框架体系、云计算体系、机器学习&&深度学习。根据千锋提供的大数据学习路线图可以让你对学习大数据需要掌握的知识有个清晰的了解,并快速入门大数据开发。

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT
开班信息
北京校区
  • 北京校区
  • 大连校区
  • 广州校区
  • 成都校区
  • 杭州校区
  • 长沙校区
  • 合肥校区
  • 南京校区
  • 上海校区
  • 深圳校区
  • 武汉校区
  • 郑州校区
  • 西安校区
  • 青岛校区
  • 重庆校区
  • 太原校区
  • 沈阳校区
  • 南昌校区
  • 哈尔滨校区