关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?

Java += 运算符本质:从字节码、类型转换到并发安全 复合赋值运算符 += 是 Java 中最常用却最易被误解的基础语法。它表面是‘先加后赋’的简写,实则涉及编译器优化、JVM 字节码指令(如 iload/iadd/istore 和 iinc)、隐式类型收缩(如 short += int 自动插入 i2s)以及字符串拼接背后的 StringBuilder 机制。其技术价值在于兼顾代码简洁性与运行效率,但代价是引入多线程非原子性、副作用时序依赖(如 i += i++)、编译期常量折叠等深层行为。典型应用场景包括数值累加、日志拼接和循环计数,而高并发计数、BigD 阅读详情
[java]  view plain  copy
  1. package common;  
  2.   
  3. public class ShortTypeTest {  
  4.   
  5.     /*    
  6.      * @param args 
  7.      */  
  8.     public static void main(String[] args) {  
  9.         // TODO Auto-generated method stub  
  10.         short s1 = 1; s1 = (short) (s1 + 1);//简单类型  
  11.         short s2=1; s2 +=1;//复合类型,复合赋值操作符+=,  
  12.         System.out.println(s1+";"+s2);  
  13.         //运行时Console输出什么,你知道吗?  
  14.     }  
  15.   
  16. }  

关于一道Java面试题,今天没事就剖析了一下,供初学Java和不清楚的朋友参考学习。

题目:

short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

解答:
Java规范有这样的规则

[

1.高位转低位需要强制转换            

2.低位转高位自动转.

]

short s1 = 1; s1 = s1 + 1;有什么错? 

答: i 是int 型   s1 short型 通过 + 运算后s1 自动转为int 型   所以错!

short s1 = 1; s1 += 1;有什么错?

答: 如果你认为表达式(x += i)只是表达式(x = x + i)的简写方式,这并不准确。

这两个表达式都被称为赋值表达式。(x = x + i)表达式使用的是简单赋值操作符(=),而(x += i)表达式使用的是复合赋值操作符。Java语言规范中讲到,复合赋值(E1 op=E2)等价于简单赋值(E1=(T)((E1) op (E2))),其中T是E1的类型,除非E1只被计算一次。   换句话说,复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行一个窄化原生类型转换。  

因此,复合赋值表达式可能是危险的。为了避免这种令人不快的突袭,请不要将复合赋值操作符作用于byte、short或char类型的变量。 因为S1是short型的,占2个字节,而1是int型的,占4个字节。在两个类型的值相加的时候,会发生自动类型的提升,要不然数据也装不下呀,是这个道理吧*_*。也就是说s1+1后,其结果是int型的,而不是short型的,所以可以想想看,把4个字节的东西放在两个字节的空间里,肯定编译不通过。       

后面的那个不会发生类型的提升,JAVA规范上说 【e1+=e2    实际上是    e1=(T1)(e1+e2) 】,其中T1是e1的数据类型。   s1+=1等效于   s1=(short)(s1+1),所以是正确的。 



可以运行下看看
public class $ {
public static void main(String... _) {
System.out.println("SHORT的取值范围" + Short.MIN_VALUE + "~" + Short.MAX_VALUE);
System.out.println("SHORT长度" + Short.SIZE);
}
}

结果:

SHORT的取值范围-32768~32767
SHORT长度16

类似的 Integer,Double....都有

当爬虫遇到TikTok滑块:一份给开发者的verifyV2避坑指南与调试心得 本文详细解析了TikTok滑块验证码verifyV2的破解与优化策略,涵盖验证码触发机制、滑块图片获取、验证请求构造及高级调试技巧。通过实战案例和代码示例,帮助开发者有效应对复杂反爬机制,提升验证通过率。特别针对verifyV2系统的加密算法和轨迹模拟提供了专业解决方案。 阅读详情

相关推荐

手把手复现论文:SVPWM过调制I区与II区算法仿真(附MATLAB源码)

本文详细介绍了SVPWM过调制I区与II区算法的MATLAB仿真实现,从理论推导到Simulink建模逐步解析。通过源码示例展示幅值补偿和六边形跟踪等关键技术,帮助电力电子研究者掌握过调制算法的核心实现方法,适用于电机控制、变频器等工业应用场景。

weixin_28739079的博客 531

Java中 short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

(s1+1运算结果是int型,需要强制转换类型)s1 += 1;(可以正确编译)对于short s1 = 1;来说,在进行s1 + 1运算时会自动提升表达式的类型为int, 那么将int类型赋值给short类型的变量s1会出现类型转换错误。对于short s1=1;s1+=1来说, +=是java语言规定的运算符,java编译器会对它进行特殊处理,因此可 以正确编译。

qq_62975017的博客 557

STM32低功耗模式下ADC采样抖动的5个隐藏陷阱及解决方案(实测避坑)

本文深入探讨了STM32低功耗模式下ADC采样抖动的5个常见陷阱及解决方案,包括多通道采样电压跃迁、外设开关信号稳定、低功耗模式与ADC时钟同步、输入阻抗失配以及基准电压稳定性问题。通过实测数据和优化代码示例,帮助工程师有效规避ADC采样数据抖动问题,提升物联网设备的测量精度和稳定性。

weixin_30316097的博客 383

Java期末选择题

一.单选题(共3题,6.0分) 1 以下选项中是对一个Java源文件进行正确编译的语句是( )。(2.0分) A、javac Test.java B、javac Test C、java Test D、java Test.class 正确答案: A 我的答案:A 得分: 2.0分 答案解析: 2 在Java中,源文件Test.java中包含如下代码,则程序编译运行的结果是( )。 public class Test { public static void main(String[ ...

weixin_43392676的博客 1494

量子城域网系列(六):从星型到环形,解析QKD网络拓扑的演进与选型

本文深入解析了量子密钥分发网络从星型到环形等主流拓扑结构的演进历程与核心原理。针对量子城域网的实际部署,文章详细对比了星型、总线型和环形拓扑的优缺点,并结合政务云、金融网点等典型应用场景,提供了实战选型指南,帮助读者在物理限制、安全需求与成本效率间找到最佳平衡。

weixin_29197835的博客 111

CTF实战:从ECDSA签名漏洞到flag获取

本文详细解析了ECDSA签名算法在CTF比赛中的实战应用,重点探讨了随机数重用和参数泄露等常见漏洞。通过PWNHUB六月赛的例题,展示了如何从签名数据中恢复私钥并获取flag,同时提供了防御措施和实战技巧,帮助参赛者提升解题能力。

weixin_42706667的博客 278

【小白学java】Test02》》》数据类型&运算符练习题

数据类型&运算符练习题一、填空题*二、选择题,位运算符,,进制转换*三、判断题四、简答题Java的数据类型分类。i++ 和 ++i 的异同之处运算符 || 和 | 的异同之处Java中基本数据类型转换的规则五、编码题六、进阶题ASCII、ISO8859-1、GB2312、GBK、GB18030、BIG5、UNICODE、ANSI等字符集的特点2)常用进制(二进制、八进制、十六进制、十进制)的特点及其转换 3)源码、反码、补码含义、作用及其转换

北慕辰的博客,欢迎各位大佬光临!! 2247

从0到1打造工业级上位机:通信协议到架构设计的实战全流程

作为一名在工控领域摸爬滚打十余年的开发者,前阵子刚帮一家新能源工厂完成了一套工业上位机系统的从0到1搭建。从最初和PLC通信联调时的“连不上、传错数”,到最终系统7×24小时稳定运行,踩过的坑、攒下的实战经验,今天就毫无保留地拆解给各位同行。这篇文章会从通信层、数据层、UI层到架构层逐层深入,全是工业现场验证过的干货,新手也能跟着落地。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 667

short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错?

对于short s1=1; s1=s1+1; 由于s1+1运算的时候会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时候,编译器件将报告需要强制转换类型的错误。。。 对于short s1=1; s1+=1;;由于+=是java语言规定的运算符,java编译器会对它进行特殊的额处理,因此可以正确的编译。。。  ...

qq_37876078的博客 2274

AI Agent开发第82课-手把手教你把paddleocr-vl做成mcp使其在DIFY里运行

本文详解如何将国产顶尖多模态 OCR 模型 PaddleOCR-VL 封装为标准 MCP(Model Calling Protocol)服务,并通过自研的 HTTP-based MCP Client 接入 Dify 1.10,实现 AI Agent 在对话中自动识别并调用 OCR 能力。该方案已在某头部保险公司真实业务流程中落地,使用了当前最先进的“Agentic AI 原生”设计思想。

打造全国最全的AI Agent开发知识领域的博客 1626

YOLOv13多分支融合机制+SE注意机制 RepVGGBlock_OREPA架构 map提升4.89,召回率提升8.66

本文提出了一种改进的YOLOv13目标检测模型,通过引入RepVGGOREPA模块和重参数化技术,显著提升了模型性能。实验结果表明,采用RepVGGBlock后,mAP提升4.89,召回率提升8.66%。文章详细介绍了模型移植过程,包括创建YOLOv13-REPVGGOREPA配置文件、修改任务处理代码和模块初始化文件,并提供了完整的OREPA模块实现代码。该模块通过多尺度特征融合和SE注意力机制,实现了训练时的丰富表征能力和推理时的高效计算,为YOLO系列模型提供了新的优化思路。

FJN110的博客 2650

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

文章目录一、这篇博客的不同二、代码示例三、总结 一、这篇博客的不同 题目: 第一题: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/new

起舞的日子 1404

4.3 Langfuse 集成实战:追踪 OpenAI、LangChain 和 LangGraph 应用

本文介绍了如何将Langfuse集成到不同类型的AI应用中,包括原生OpenAI、LangChain和LangGraph应用。主要内容包括: 两种集成模式:手动追踪(精确控制)和自动追踪(通过回调机制) 三种应用场景的集成方案: 原生OpenAI应用:使用langfuse.trace()手动记录对话流程、LLM调用和工具执行 LangChain应用:通过LangfuseCallbackHandler自动追踪Agent执行过程 LangGraph应用:与LangChain相同的自动追踪方式,可可视化节点和状态

yonggeit的博客 3305

【一道面试题】short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

初看这道题感觉没什么 但其实考察了很多细小的,有关数据类型转换的点,我们下面来详细剖析下! 首先我们来看 short s1 = 1; s1 = s1 + 1;有什么错? 当我们把代码敲出来 short s1 =1; s1 = s1+1; 会出现如下情景 无法将int类型转换为short类型 我们知道 short 与int 类型 所占的空间不同,int类型所占的...

鸿鹄亭 4147

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

java s1_转!!Java 基础面试题的剖析: short s1=1;s1 = s1 +1 报错? s1+=1 呢

packagecommon;publicclassShortTypeTest{/**@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubshorts1=1;s1=(short)(s1+1);//简单类型shorts2=1;s2+=1;//复合类...

weixin_39758696的博客 217

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【Java入门到精通】*基础篇

Java入门教程摘要(1-6期) 本系列从零讲解Java,基于Java 8 LTS版本。 Java历史与特性:1995年Sun公司发布,以跨平台、面向对象为核心优势,应用于后端、安卓、大数据等领域。 跨平台原理:通过JVM将字节码转换为机器码,实现"一次编写,到处运行"。 环境组件:JDK(开发工具包)⊃ JRE(运行环境)⊃ JVM(虚拟机),开发需安装JDK。 安装配置:提供Windows/Mac的JDK安装指南,强调路径无中文/空格。 环境变量:设置JAVA_HOME指向JDK路径,Path添加bin

2301_81248642的博客 932

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

复习笔记-java中的++、--与char面试题

“++面试题”public class _adddeng { public static void main(String[] args) { // 面视题 // short s=1; // s=s+1; //报错 short类型进行数据操作的时候类型自动提升为int 因此short不能等于int short s = 1;

此处已不更新,请访问个人网站 403

有赞2019校招Java笔试B卷全剖析:考点模块与备考实战指南

在技术校招中,Java基础与并发编程始终是衡量开发者核心能力的关键标尺。集合框架如HashMap的底层扩容机制、volatile的可见性与原子性边界、线程池参数与拒绝策略的合理配置,构成了笔试中高频出现的知识锚点。理解这些原理不仅有助于应对在线编程与选择题,更能支撑起高并发场景下的工程实践。从字符串常量池到锁升级流程,从SQL索引失效到MVCC快照读,每个知识点都在检验候选人是否具备扎实的计算机功底与排错思维。本文以有赞2019校招Java笔试B卷为样本,结合真实考试体验与备考节奏,系统回顾了Java核心、

weixin_34025051的博客 425
上一篇: &与&&有什么区别?
下一篇: Java 枚举(enum) 详解7种常见的用法
ole_triangle_java
博客等级 码龄10年 82粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值