三目运算符----类型自动提升

Java 三目运算符类型转换:从 3 个 NPE 案例解析自动拆箱与类型对齐 本文深入解析Java三目运算符在类型转换中的自动拆箱与类型对齐机制,通过三个典型NPE案例揭示常见陷阱。从JLS规范到字节码层面,详细讲解如何避免NullPointerException,并提供防御性编程实践建议,帮助开发者安全使用三目运算符。 阅读详情

今天偶然发现一问题,代码如下:

public static void main(String[] args) {
		int i=99;
		System.out.println("99999判断结果:"+(true?'a':99999));
		System.out.println("-1判断结果   :"+(true?'a':-1));
		System.out.println("0判断结果    :"+(true?'a':0));
		System.out.println("65535判断结果:"+(true?'a':65535));
		System.out.println("65536判断结果:"+(true?'a':65536));
		System.out.println("i判断结果    :"+(true?'a':i));
	}

涉及到了三目运算中类型自动提升的一些问题,运算结果如下:

99999判断结果:97
-1判断结果   :97
0判断结果    :a
65535判断结果:a
65536判断结果:97
i判断结果    :97

总结出了以下的结论:

(1)假如表达式1和表达式2具有相同的类型,那么整个条件运算符结果的类型就是这个类型。
(2)假如一个表达式的类型是T,T是byte或short或char,另一个表达式的类型是int类型的常量表达式,而且这个常量表达式的值是可以用类型T表示的(也就是说,常量表达式的值是在类型T的取值范围之内),那么整个条件运算符结果的类型就是T。 
(3)除以上情况外,假如表达式1和表达式2的类型不同,那么将进行类型提升,整个条件运算符结果的类型就是提升后的类型

根据上述结论可以看出,参考结论(2)char类型的取值范围为0-65535,在char取值范围中均会返回char类型的值,所以输出a。-1和65536超出了char的取值范围,所以类型提升为int型,输出a对应的ascii码。最后一条判断,已经明确了i为int类型,所以根据结论三,类型提升,输出结果97。

【AI+教育】别再让 Cursor 只当编辑器了!4 步解锁 Claude 官方技能! 本文介绍了在Windows环境下通过OpenSkills工具在Cursor中调用Claude AI技能的方法。主要内容包括:1)安装Node.js环境;2)全局安装OpenSkills工具;3)安装Claude官方技能库;4)通过AGENTS.md文件同步技能;5)在Cursor中直接调用技能完成Excel、PPT等任务。文章提供了详细的操作步骤和示例,帮助用户快速上手使用AI技能提升工作效率。 阅读详情

相关推荐

小米手机免登录开启USB安装与调试(MIUI 9-11实测,已Root可用)

本文详细介绍了小米手机免登录开启USB安装与调试的底层方案,适用于已Root的MIUI 9-11版本设备。通过修改系统配置、禁用MIUI安装器验证和强制开启USB调试等步骤,帮助开发者绕过账号限制,实现快速调试。文章包含不同MIUI版本的兼容性处理和常见问题解决方法,实测有效。

weixin_33675507的博客 287

三元运算符精度问题

虽然obj是指向了Integer类的数据,可是由于三元运算符是一个整体,所以Double会导致数据精度都会提高。

weixin_62466605的博客 361

从零开始VCS+Verdi 安装过程

从零开始VCS+Verdi 安装及破解过程 主要参考:VCS+Verdi 安装及破解过程(CentOS7)-----FPGA开发 1. 安装文件结构 –vcs-mx_vL-2016.06 –verdi_vL-2016.06-1 –scl_v11.9 #此程序统一管理license等破解文件 –SynopsysInstaller.rar #此程序用于安装以上3个程序 –sc...

Ztrans的博客 2万+

Java中你所轻视的三目运算符

【1】一个小坑 三目运算符是我们经常在代码中使用的,a= (b==null?0:1); 这样一行代码可以代替一个 if-else,可以使代码变得清爽易读。但是,三目运算符也是有一定的语言规范的。在运用不恰当的时候会导致意想不到的问题。 对于条件表达式b?x:y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。 一个条件表达式...

小小默:进无止境 9831

ANSYS Products19.1下载及安装教程

ANSYS Products19.1下载及安装破解教程 前言 ANSYS软件是美国ANSYS公司研制的大型通用有限元分析(FEA)软件,是世界范围内增长最快的计算机辅助工程(CAE)软件,能与多数计算机辅助设计(CAD,computer Aided design)软件接口,实现数据的共享和交换,如Creo, NASTRAN、Algor、I-DEAS、AutoCAD等。ansys project包括一整套的软件集合,它耦合了CFD模型的前处理,求解器和后处理所需要的相关软件,特比是它的workbench模块,

Mekeater的博客 2万+

MCGS触摸屏Modbus TCP通讯实战:从寄存器写入到字符串处理的完整代码解析

本文详细解析了MCGS触摸屏通过Modbus TCP协议实现寄存器写入和字符串处理的完整代码,涵盖单寄存器写入、多寄存器写入及字符串传输等核心技术。文章还提供了MCGS组态环境中的实战配置步骤和常见问题排查方法,帮助开发者快速掌握工业自动化通讯的关键技术。

study的专栏 755

Java运算符、自动类型提升及控制台的输入

一、运算符 1.算术运算符 算术运算符:+,-,*,/,%,++,– /:两个数相除,取商 %:两个数相除,取余数 ++:给变量自增1 ​ i++:都是给i加1。i++的值还是当i来算。 ​ i++:先计算,再加1 ​ ++i:也是给i加1。++i的值相当于加1之后 ​ ++i:先加1,再运算 –:给变量自减1 ​ 都是给i进行减1。 ​ i–,值相当于i本身。最终执行之后给i减1。 ​ ...

paidaxing15的博客 231

VASPKIT绘制平面平均电荷差分密度

平面平均密度差(planar-averaged electron density difference)是密度差的衍生。密度差是个三维空间函数,经常通过绘制平面图、等值面图方式图形化考察。虽然这两种图很直观,但平面图会受到截面选取的影响,而等值面图会受到等值面数值(isovalue)选取的影响,因此都有一定任意性,也不容易定量讨论。对于电子转移有比较明确方向的情况,可以绘制平面平均密度差曲线,由此可以清楚地考察垂直于选取的方向上每个截面上的密度差积分值,在定量讨论、对比上比较便利。

weixin_43948934的博客 1万+

Python编程技巧:掌握三元运算符,简化代码逻辑与提高编程效率的关键

在这篇文章中,我们深入探讨了Python中的三元运算符,这是一种能够简化条件判断语句的强大工具。通过简介和示例,我们了解到三元运算符的基本用法,即x if condition else y形式,它根据条件的真假返回不同的值。我们还比较了三元运算符与传统的if-else语句在代码简洁性和效率上的优势。此外,文章展示了三元运算符在不同编程场景下的应用,包括在函数返回值和列表推导式中的使用,提高了代码的可读性和简洁性。

lph159的博客 1043

零基础入门转录组数据可视化——绘制差异小提琴图(常规)

转录组数据可视化之一,先介绍相关基础知识,其次用实际案例为基础,由浅入深介绍差异小提琴图绘制的全过程,包括内容有相关代码和截屏。

呆猪儿的博客 635

知识图谱-KGE-语义匹配-双线性模型-2018:SimplE

【paper】 SimplE Embedding for Link Prediction in Knowledge Graphs 【简介】 本文是加拿大英属哥伦比亚大学的两位学者发表在 NIPS 2018 上的工作,文章提出了 SimplE(Simple Embedding)。这篇和前面一篇差不多,也是对 1927 年的 CP 进行改进(简化),传统CP为实体分配的两个向量是独立训练的,SimplE利用关系的逆在三元组打分函数中加上了一个对称项,使得每个实体的两个向量依赖学习,并且 SimplE 的复杂度随

u013250861的博客 958

探索JavaScript中强大的三元运算符:简洁、灵活、提升代码效率

它可以简化代码并提高可读性,但在使用时要避免过度复杂的嵌套,以保持代码的清晰性。可读性和可维护性优先:如果代码的可读性和可维护性更为重要,尤其是在团队合作或长期维护的项目中,使用 if-else 语句可以使代码更清晰和易于理解。复杂的条件逻辑:如果条件逻辑非常复杂,包含多个条件分支和多个操作语句,使用 if-else 语句可以更清晰地表达代码逻辑,并使代码易于理解和维护。需要执行多个操作:如果根据条件需要执行多个操作语句,if-else 语句提供了更灵活的结构,可以在不同的条件分支中执行不同的代码块。

代码炼金术 5470

C#串口通信从入门到精通(7)——整数/浮点数与二进制、八进制、十六进制之间的转换与C#实现

本文详细介绍由博主开发的DataConvert串口通信帮助类的用法,该帮助类涵盖了串口通信领域所有的数据转换方法,帮助大家快速编写串口通信程序!

qq_34059233的博客 2879

三目运算符---类型自动提升

今天偶然发现一问题,代码如下: [html] view plaincopy public static void main(String[] args) {           int i=99;           System.out.println("99999判断结果:"+(true?'a':99999));           System.out.

火炬手 944

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java--三目运算符 类型自动提升

public static void main(String[] args) { int i=99; System.out.println("99999判断结果:"+(true?'a':99999)); System.out.println("-1判断结果 :"+(true?'a':-1)); System.out.println(

GDL's BLOG 1470

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

一道三目运算符的题目

请说出以下程序的运行结果: publicstaticvoidmain(String[]args){ intn1=1,n2=2; System.out.println(n1==n2?100.0:200); System.out.println(n1==n2?'A':66); System.out.println(n1...

yanqun007的博客 1535

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java数值类型提升机制(三目条件运算符与空指针问题)

Java语法特性隐藏在了代码中的每个角落,最常见的就是自动拆装箱和类型提升了。这些特性在带来编码便利性的同时也在代码中藏下了些不易察觉定时炸弹,比如对null拆箱时引发的空指针异常NPE。本文就将JLS中关于数值提升的机制译述出来,便于更深刻地理解代码后面的东西。 问题 以下几段代码为什么是这样的运行结果: Object k = true ? null : 1; System...

Stay Foolish 2811

java运算符

一.算数运算符:+、-、*、/、%、++、-- 1.知识点:基本使用 1.++a:先自增1,再使用,a++:先使用,再自增1 2.——,减1,原理与++一致 2.知识点:深入算数运算符 //案例一:byte做运算,会自动向上转型成int类型再做运算 //案例2:short做运算,会自动向上转型成int类型再做运算 ​ //案例3:除了byte和short类型,其余的数值型做运算会向上转型成取值范围大的类型再做运算 ​ //案例4:浮点型做运算有可能会失去精度,在工作用浮点数做运算都用BigDec

昨日犹有青空的博客 237

Java面试(1)-- Java逻辑运算符

1 class Demo04{ 2 public static void main(String[] args){ 3 //逻辑运算符 4 5 //例1 6 System.out.println(true | false & false); 7 //结果 tru...

weixin_30335575的博客 129

JavaSE

JAVA SE关键字标识符数据类型自动提升与强制转换=与+=的区别逻辑运算符& | !常量与变量三目运算符 关键字 关键字的特点: 被java语言赋予特殊含义的单词 关键字的所有字母都为小写,并在集成开发环境中与其他字体有明显的区别 标识符 在程序中自定义的一些名称,并只能由26个英文字母、0-9、下划线、$组成,同时Java严格区分大小写 在起名字时,为了提高可读性,要尽量有意义 Jav...

qq_43672677的博客 135

java基础03

基础

qq_62373779的博客 342

Java - 运算符 - 数学工具包java.lang.Math类

算数运算符 [plain] view plain copy 需要注意的问题,类型自动提升,其实类型提升是在运算之前完成的   加法运算       byte a = 1;       byte b = 2;       byte c = a+b;       报错,因为a+b之前会将a,b自动提升为int       正确为: byte 

天边的鱼肚白 4285

Java基础三

java基础三学习

qq_63523782的博客 410

Java三目运算符的一些冷知识

1、如题,试写出输出结果: int a = 1, b = 10; int temp1 = 0 < 1 ? a++ : b++; System.out.println("a = " + a + ", b = " + b); System.out.println("temp1 = " + temp1); 2、如题,试写出输出结果: int c = 1, d = 10; int temp2 = 0 < 1

Ink设计 2365

Study2 数据类型与运算符

1.1Java注释 a.单行注释// b.多行注释/* */(不建议使用) c.文档注释/**   */ 1.2 Java标识符(变量、常量、类、函数等的名称) 标识符要求 标识符由字母、数字、_ 、$(忘掉)组成,其中不能以数字开头,不能使用java中的关键字。 命名规范:驼峰命名法 大驼峰:对于类名,类名是以大写字母开头,如果类名由多个单词组成,则每个单词首字母大写。 eg: clas...

image_button的博客 163

【25节JavaSE知识点·3】变量 数据类型 数据自动类型提升 表达式 Java运算符

变量 数据类型 数据自动类型提升 表达式 Java运算符

qq_42195589的博客 370
上一篇: JSP学习之----JSP声明/JSP输出表达式/JSP脚本
下一篇: 去除Chrome浏览器文本框边缘的黄线
LowKeySk
博客等级 码龄15年 21粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值