short s1=1;s1 = s1 +1有什么错?看这篇就够了。

发布时间:2024-11-30 23:03

你知道为什么99%的人都不知道1+1=2吗?因为剩下那1%在看手机。 #生活乐趣# #幽默笑话#

最新推荐文章于 2023-07-20 21:42:02 发布

那起舞的日子 于 2020-09-01 06:05:14 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

一、这篇博客的不同

题目:

第一题:short s1 = 1; s1 = s1 + 1;有什么错?
* 第二题:short s1 = 1; s1 += 1;有什么错?
* 第三题:第三题:short s1=1,s2=1;short s3=s1+s2;有什么错?

看了网上相同题目的解析,要么太啰嗦,要么知识点讲解得不全、不透彻,笔者重新梳理了下。所以看这篇就够了。

二、代码示例

具体见github

https://github.com/cmhhcm/newcoder_practise.git

package com.cmh.newcoder; import org.junit.jupiter.api.Test; /** * @Author: hmc * @Date: 2020/8/31 下午3:52 */ public class OpCastTest { /** * 知识点:Java运算符:数值类型转换 * 题目: * 第一题:short s1 = 1; s1 = s1 + 1;有什么错? * 第二题:short s1 = 1; s1 += 1;有什么错? * 第三题:第三题:short s1=1,s2=1;short s3=s1+s2;有什么错? */ @Test public void testAutoBoxingDeboxing() { short s1 = 1; // s1 = s1 +1;//Required Type:short ;Provied type = int s1 = (short) (s1 + 1);//1默认是int类型,和short类型运算,自动会把short向上转型为int,相加后的值也为int,想要赋值给short,需要强制向下转型 s1 += 1; short s2 = 1; short s3 = 1; s3 = (short) (s1 + s2);//不转换也会报错:Required Type:short ;Provied type = int 理由:存在溢出可能,所以确保安全,要手动强制向下转型 //上面s3,如果结果超出shor的Max的值呢? /** * 验证溢出时候如何计算 * short MIN_VALUE = -32768 (-2^15) * MAX_VALUE = 32767 (2^15 -1) */ short s4, s5, s6; s4 = 32767; s5 = 32767; //s6 = s4 + s5;//报错:Required short,Provied int(因为自动向上转型了) s6 = (short) (s4 + s5); System.out.println("两个short类型相加,需要强制转换,如果超出short范围后的值是:s6:\t" + s6);//结果是-2?why? System.out.println(s4 + s5);//65534 } /** * 总结: * 1、数值类型之间的合法转换。 * 1)E1 op E2 (op标识operation,运算符的意思),存在一个范围较大的,会自动向上转型; * 2)byte->short ->int > long * float -> double * char -> int 这三组不会出现数字丢失现象。(见图一) * * int -> float * long -> double 表示可能有精度损失的转换。 * * 2、复合赋值表达式中会自动地将所有执行结果转型为其左侧变量的类型。 * eg:复合赋值(E1 op = E2)等价于简单赋值(E1 = (T)(E1) op (E2)),具体到s1 += 1就是程序内部会默认按照s1的类型转换一下,所以不会报错。 * * 3、如果试图将一个数值从一种类型强制转换为另一种类型,而且又超出了目标类型的标识范围,结果 * 就会截断成一个完全不同的值。类似 s6 = (short)(s4+s5) * * */ }

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

在这里插入图片描述

三、总结

代码中注释了,看得不是特别清楚,这里在重复下。

1、数值类型之间的合法转换。
* 1)E1 op E2 (op标识operation,运算符的意思),存在一个范围较大的,会自动向上转型;
* 2)byte->short ->int > long
* float -> double
* char -> int 这三组不会出现数字丢失现象。(见图一)
*
* int -> float
* long -> double 表示可能有精度损失的转换。
*
* 2、复合赋值表达式中会自动地将所有执行结果转型为其左侧变量的类型。
* eg:复合赋值(E1 op = E2)等价于简单赋值(E1 = (T)(E1) op (E2)),具体到s1 += 1就是程序内部会默认按照s1的类型转换一下,所以不会报错。
*
* 3、如果试图将一个数值从一种类型强制转换为另一种类型,而且又超出了目标类型的标识范围,结果
* 就会截断成一个完全不同的值。类似 s6 = (short)(s4+s5)

网址:short s1=1;s1 = s1 +1有什么错?看这篇就够了。 https://www.yuejiaxmz.com/news/view/328519

相关内容

家务一键搞定!Astribot S1机器人让你秒变“甩手掌柜”
智慧之选:TOPPER智能音箱S1让生活更简单
星尘智能(Astribot)演示了Astribot S1:下一代人工智能机器人
米家IH电饭煲S1:解锁生活的美味与便捷新境界
会颠勺的国产机器人来了!星尘智能推AI机器人Astribot S1 家务活全包
智能和目安防传感器S1 提升生活质量
【手慢无】高效智能COUCOQ StyleMe S1霜月白:洗净除菌烘干,打造生活品质新高度
生活中大多数电热器都有多个档位.学习了电功率知识后.小锐同学利用电压为6V的电源.两个定值电阻.设计了如图所示的电路中来探究电热器多档位的问题.已知R1=10Ω.R2=30Ω.请计算:(1)S1.S3断开.S2闭合时.电路中的电流是多少?(2)S1断开.S2.S3闭合时.通电5min电路消耗的电能是多少?(3)S2断开.S1.S3闭合时.该电路总功率是多少? 题目和参考答案——青夏教育精英家教网——
2.生活在高原的人们常用高压锅煮食物.如下图所示是电压力锅和它的工作电路图.R1为工作时的加热电阻.其额定功率为800W.R2为保温保压电阻.且R2=2R1.S1为压力开关.当压强达到设定值时S1会自——青夏教育精英家教网——
在用打点计时器测定小车速度的实验中得到一条纸带,从比较清楚的点开始,每五个打印点取一个计数点,分别表明0、1、2、3…,量得0与1两点间的距离s1=30mm,2与3两点间的距离为

随便看看