java表达式类型的自动提升

Java表达式类型自动提升 【一道经典的Java面试题】   short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?   答案是:前者错,后者对。相信不管是否经历过java面试过,大家一定对这道题很熟悉。因为这道题确实太经典了,以至于成为了基本每个老师都会拿出来,当作课堂例题来讲。要说清这道题,首先看看java表达式类型转换规则。   【java表达式类型转换】   java是一门强类型语言,不仅每个变量具有指定的数据类型,它的表达式也有指定的数据类型。因此在不同类型之间进行赋值操作很容易遇到到类型转换的问题。   在JAVA表达式中,如果进行运算 立即下载
当一个java算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。Java定义如下的自动提升规则:
1. 所有byte型、short型和char型将被提升到int型。
2. 整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。操作数的等级排列如下图所示,位于箭头右边类型的等级高于位于箭头左边类型的等级。


下面程序示范了一个典型的错误:
//定义一个short类型变量
short sValue = 5;
//表达式中的sValue将自动提升到int类型,则右边的表达式类型为int
//将一个int类型赋给short类型的变量将发生错误。
sValue = sValue - 2;
上面中的sValue -2表达式的类型将被提升到int类型,这样就是把右边的int型值赋给左边的short型变量,从而引起错误。

下面代码是表达式类型自动提升的正确示例代码(程序清单同上):

byte b = 40;
char c = 'a';
int i = 23;
double d = .314;
//右边表达式中在最高等级操作数为d(double型)
//则右边表达式的类型为double型,故赋给一个double型变量
double result = b + c + i * d;
//将输出144.222
System.out.println(result);

必须指出的,表达式的类型将严格保持和表达式中最高等级操作数相同的类型,下面代码中两个int整数进行除法运算,即使无法除尽,也将得到一个int结果(程序清单同上):
int val = 3;
//右边表达式中2个操作数都是int,故右边表达式的类型为int
//因此,虽然23/3不能除尽,依然得到一个int整数
int intResult = 23 / val;
//将输出7
System.out.println(intResult);
从上面程序中可以看出,当两个整数进行除法运算时,如果不能整数,得到结果将是把小数部分截断取整后的整数。

如果表达式中包含了字符串,则又是另一番情形了:因为把加号(+)放在字符串和基本类型值之间时,这个加号是一个字符串连接运算符,而不是进行加法运算。看如下代码:
//输出字符串Hello!a7
System.out.println("Hello!" + 'a' + 7);
//输出字符串104Hello!
System.out.println('a' + 7 + "Hello!");
对于第一个表达式"Hello!" + 'a' + 7,先进行"Hello!" + 'a'的运算,将把'a'转换成字符串,将拼接成字符串Hello!a,接着进行"Hello!a" + 7的运算,这也是一个字符串连接运算,得到结果是Hello!a7。对于第二个表达式,先进行'a' + 7加法运算,其中'a'自动提升到int型,变成a对应的ASCII值:97,从97 + 7将得到104,然后进行104 + "Hello!",104会自动转换成字符串,将变成两个字符串的连接运算,从而得到104Hello!。
自动驾驶开发者必看:nuscenes数据集23类物体标注全解析(附避坑指南) 本文深入解析nuscenes数据集的23类物体标注系统,为自动驾驶开发者提供全面的标注规范解读和实战避坑指南。涵盖多模态数据组织、类别细分规则、属性系统应用技巧以及标注质量验证方法,帮助开发者高效利用这一标杆数据集提升模型性能。 阅读详情

相关推荐

iPhone用户必看:TrollStore巨魔商店在线安装保姆级教程(iOS 14-16.6.1适用)

本文为iOS 14至16.6.1系统的iPhone用户提供了一份详细的TrollStore(巨魔商店)在线安装教程。文章从核心原理、安装前准备讲起,逐步详解了通过Safari浏览器获取安装器、信任企业证书、部署TrollStore及关键后置配置的全过程,并附带了常见问题排错指南,帮助用户安全、高效地实现无需越狱安装第三方应用。

h0i1j2k3l的博客 1972

Java中的自动类型提升与强制类型转换

自动类型提升是指在程序**运行时**因为某种情况需要,JVM将较小的基础数据类型自动转换为较大的基础数据类型,以保证精度和正确性。在Java中,需要进行类型提升的情况有以下几种: ### 1. 运算时byte、short和char提升为int类型 ### 2. 运算时较小数值类型提升为较大范围数值类型 ### 3. 调用方法时实参提升为方法形参类型 ## 二、强制类型转换 类型提升是自动将较小基础数据类型提升为较大基础数据类型,而强制类型转换是指程序员在代码中使用类型标识强制将较大基础数据类型转换为较小基础

m0_56602092的博客 1795

PID算法(位置式pid算法和增量式pid算法)

PID 算法是闭环控制系统中常用的算法,PID 分别是 Proportion(比例)、Integral(积分)、Differential(微分)的首字母缩写。它是一种结合比例、积分和微分三个环节于一体的闭环控。

m0_57678852的博客 2万+

Java基础:类型转换:自动类型转换、表达式的自动类型提升

Java基础:类型转换:自动类型转换、表达式的自动类型提升

weixin_58618735的博客 480

VQGAN实战:从文本到高清图像的保姆级生成教程(含PyTorch代码)

本文详细介绍了VQGAN(Vector Quantized Generative Adversarial Network)在文本到高清图像生成中的应用,提供了从环境配置到模型加载、文本编码及图像生成的完整PyTorch代码教程。通过实战案例和高级调优技巧,帮助开发者快速掌握VQGAN的核心技术,实现百万像素级的高清图像生成。

u8v9w0x1y的博客 649

PX4飞控CAN总线通信深度配置:从menuconfig到驱动加载的完整指南

本文详细解析了PX4飞控中CAN总线通信的深度配置流程,从menuconfig选项设置到驱动加载的完整指南。涵盖硬件抽象层、驱动层和应用层的配置细节,提供实际验证方法和故障排查技巧,帮助开发者高效实现CAN通信,特别适用于无人机和机器人底盘运动控制等场景。

weixin_30374009的博客 498

Java对于表达式中的自动类型提升

1 表达式中的自动类型提升: 表达式求值时,Java自动的隐含的将每个byte、short或char操作数提升为int类型,这些类型的包装类型也是可以的。 例如: short s1 = 1; s1 = s1 + 1; s1+1运算中的操作数s1会被自动提升为int类型,s1+1运算结果会成为int类型,再赋值给short类型的s1时,编译器会报告需要强制转换类型的错误。需要改为shor...

angyuhh07719的博客 244

MaPLe: Multi-modal Prompt Learning

具体而言,我们在语言分支中附加可学习的上下文标记,并通过耦合函数显式地将视觉 Prompt 置于语言 Prompt 上,以建立它们之间的交互。使用 Prompt 来适应CLIP (语言或视觉) 的单个分支中的表示是次优的,因为它不允许在下游任务上动态调整两个表示空间的灵活性。由此,提出了一种分支感知的多模态 Prompt,通过在两种模态之间共享提示来协调 CLIP 的视觉和语言分支。在 Prompt Tuning 中,必须采取多模态方法获得同时适应 CLIP 的视觉和语言分支,以实现上下文优化的完整性。

weixin_48907099的博客 1051

表达式类型的自动提升

当算术表达式包含多个基本数据类型时,整个算术表达式的数据类型会在数据运算时出现类型的自动提升 。 所有的 byte , short , char 会自动提升为int类型。 Double  d1 = 123+ 1.1F + 99L + 3.14 ;     123 是  整数(int) ;   1.1F 是 浮点型(float);    

努力努力再努力 1060

WSOLA原理及matlab仿真

WSOLA原理 对于 OLA 算法来说,常常无法保持原信号中的周期性结构,在帧裁剪的过程中,不能保证每一个帧都能覆盖完整周期并保证其相位对齐,会产生相位跳跃失真。 为保证**基频不变**,就要使用 WSOLA 算法。 WSOLA 并不直接在 Ha 处找一帧进行直接拼接,而是在一个区间内寻找与理想帧最接近的一帧进行叠加。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/8a234f4fde104fc69a9f3ddb7bcf3014.png?x-oss-process=ima

ManiacLook的博客 3214

Prompt Engineering 学习指南:从入门到精通的最佳路径与资源

随着大型语言模型(LLM)能力的飞速发展,Prompt Engineering(提示工程)已成为人与AI协作的核心技能。本报告旨在为不同水平的学习者提供一条清晰、高效的学习路径,整合了当前社区公认的最佳实践和顶级开源资源,帮助您系统地掌握 Prompt Engineering,释放 LLM 的全部潜力。保持好奇心,不断尝试,您将能驾驭语言模型这一强大的工具,创造出前所未有的价值。超越简单的“一问一答”,学习如何将 Prompt Engineering 与外部工具和数据结合,构建强大的 AI 应用。

shiter编写程序的艺术 696

java表达式类型的自动提升_java表达式中类型的自动提升

除了赋值,还有另外一种类型变换:在表达式中。想要知道原因,往下看。在表达式中,对中间值的精确要求有时超过任何一个操作数的范围。例如,考虑下面的表达式:byte a =40;byte b = 50;byte c = 100;int d = a * b / c;中间项结果a*b很容易超过它的任何一个byte 型操作数的范围。为处理这种问题,当分析表达式时,Java自动提升各个byte型或short型的...

weixin_39817347的博客 194

openbmc 支持mctp over pcie(三)(支持作为endpoint)

本文介绍了在Intel BHS平台上支持MCTP over PCIe端点开发的调试方法。开发基于CodeConstruct和AspeedTech-BMC的开源项目,将内核驱动改为模块形式以便调试。内容包括DTS配置、驱动模块设置步骤,以及如何将BMC配置为端点设备。调试过程涉及内核模块加载、MCTPD启动、参数设置等关键命令,并展示了路由表、地址和邻居信息的测试结果。该方案仅为实验性工作,需注意停止其他使用/dev/aspeed-mctp0接口的应用。

wit_yuan的专栏 1553

Java的表达式自动类型提升

在表达式中,小范围类型的变量,会自动转换成表达式中较大范围的类型,再参与运算。类型高低表:byte,short,char---->int---->long---->float---->double(依次递增)

2301_80079117的博客 360

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java中的表达式类型自动提升

Java中的表达式类型自动提升 java默认输入的整型为Int类型,如果在byte(-128+127)、short(-32768+32767)可表示的范围之内,则默认进行自动类型转换,如 byte s1=3; //右侧的3默认是int型,但是3在byte可表示的范围之内,因此可以自动转换,不出错 short s2=27386; //右侧的27386默认是int型,但是27386在short可表示的范围之内,因此可以自动转换,不出错 但是: byte s1=5; s1=s1-2; 会出错。因此表达

weixin_42556307的博客 681

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Java 表达式类型的自动提升

当一个java算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。Java定义如下的自动提升规则: 1. 所有byte型、short型和char型将被提升到int型。 2. 整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。操作数的等级排列如下图所示,位于箭头右边类型的等级高于位于箭头左边类型的等级。 下面程序示范了一个典型的错误:

pmcasp的博客 354

java表达式类型的自动提升(转)

转自http://www.blogjava.net/hyperjava/articles/241839.html 当一个java算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。Java定义如下的自动提升规则:1.所有byte型、short型和char型将被提升到int型。2.整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。操作数的...

156

Java表达式类型的自动提升

看书看到:当一个算数表达式中包含多个基本数据类型时,整个算数表达式的数据类型将发生自动提升。 随手写了一个平时不常用的例子,没想到竟然报错了! 两个short互相加减应该最大也是short啊,怎么会是int呢,仔细看了一下书,发现一行没注意的字: 1.所有byte类型,short类型,和char类型将被提升到int类型。 2.整个算数表达式的数据类型自动提升到与表达式中最高等级操作数...

New_Yao的博客 523

18 Java中的表达式自动类型提升:深入解析与应用

1. 定义表达式的自动类型提升是指在表达式计算过程中,Java编译器自动将操作数(操作数可以是变量、常量或表达式)提升为更广泛的数据类型,以确保计算结果的精度和范围。这种提升通常发生在操作数的数据类型不一致时,Java会选择一个更广泛的数据类型来容纳所有操作数。2. 自动类型提升的规则整数类型提升:如果表达式中包含byteshort或char类型的操作数,这些操作数会被自动提升为int类型。浮点类型提升:如果表达式中包含float类型的操作数,所有操作数会被自动提升为double类型。混合类型提升。

xycxycooo的博客 615

java类型自动提升_java表达式类型的自动提升(转)

转自http://www.blogjava.net/hyperjava/articles/241839.html当一个java算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。Java定义如下的自动提升规则:1.所有byte型、short型和char型将被提升到int型。2.整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。操作数的等级排列如下图...

weixin_39693437的博客 156
上一篇: 总结:集合框架(TreeSet)
下一篇: 学习笔记之多线程
wangpanbaoding
博客等级 码龄18年 42粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值