2026/6/9 17:26:27
网站建设
项目流程
gg服务器租用网站,如何自己做网页,昆明建站专家,福田网络推广公司#x1f3ac; 博主名称#xff1a; 超级苦力怕 #x1f525; 个人专栏#xff1a; 《Java成长录》 《AI 工具使用目录》 #x1f680; 每一次思考都是突破的前奏#xff0c;每一次复盘都是精进的开始#xff01; 前言 本文主要内容#xff1a;快速搞懂 long类型… 博主名称超级苦力怕 个人专栏《Java成长录》《AI 工具使用目录》 每一次思考都是突破的前奏每一次复盘都是精进的开始前言本文主要内容快速搞懂long类型为什么必须写L、字面量默认类型、隐式转换和显式转换文章目录前言一段“看起来没问题”的赋值为什么有人会编译失败1. 整数字面量默认是 int2. 宽化转换隐式转换2.1 什么是“宽化转换”3. 为什么 long 类型需要加 L4. 一张图看懂编译器到底怎么处理你的赋值5. 隐式 vs 显式你真正需要记住的对比6. 常见坑宽化转换也可能丢失信息结语一段“看起来没问题”的赋值为什么有人会编译失败先看这段代码publicstaticvoidmain(String[]args){longa999999999;//正确longb999999999;//正确longc9999999999L;//正确}很多人第一次看到会觉得a、b、c不都是long吗为什么第三行还要加个L答案藏在一个关键规则里Java 对整数字面量的默认类型判断。1. 整数字面量默认是 intJava 编译器看到一个没有任何后缀的整数比如999999999时会按下面的规则理解它没有后缀的整数字面量默认是int带L或l后缀的整数字面量才会被当成long也就是说999999999会先被编译器当成int9999999999L会直接被当成long2. 宽化转换隐式转换int - long 为什么能自动发生看第一行longa999999999;// int - long编译器的“脑内过程”大概是999999999是整数字面量默认int目标变量a是longint - long属于宽化转换Widening Primitive Conversion宽化转换通常是安全的不会溢出、不会截断所以允许隐式自动完成2.1 什么是“宽化转换”宽化转换的核心是小范围类型自动升级到大范围类型不需要强制类型转换语法常见的宽化链路byte - short - int - longchar - int - longfloat - double3. 为什么 long 类型需要加 L为什么 9999999999 不加 L 就不行关键在于它超出了 int 的取值范围。Integer.MAX_VALUE 2147483647如果你写成这样longc9999999999;// 编译错误integer number too large编译器仍然会先尝试把9999999999当成int字面量解析结果发现放不下于是直接报错。它甚至还没判断是否可以宽化转换。所以你必须告诉编译器他是 long 类型即在最后面加 Llongc9999999999L;// OK4. 一张图看懂编译器到底怎么处理你的赋值是否是否是否写下整数字面量: 9999999999是否带 L/l 后缀?字面量类型 long字面量类型 int是否超出 int 范围?编译失败: integer number too large目标变量类型更大?赋值成功隐式宽化转换: int - long按规则继续校验/可能需要显式转换5. 隐式 vs 显式你真正需要记住的对比维度隐式转换宽化显式转换强制/声明触发方式编译器自动完成你必须写出来如(int)或L典型方向小范围 - 大范围大范围 - 小范围或需要明确类型安全性通常安全可能溢出 / 丢失精度例子int - longlong - int、9999999999L这里要注意9999999999L更像是“字面量类型显式声明”不是(type)形式的强转但它的目的相同避免编译器误判。6. 常见坑宽化转换也可能丢失信息通常认为宽化转换是安全的不会丢失信息。这在int - long这类整数转换中确实成立但需要特别注意数值类型转换的精度问题intx16_777_217;// 2^24 1floatfx;// int - float宽化inty(int)f;System.out.println(y);// 结果可能不是 16_777_217原因在于float的有效精度有限约24位二进制有效数字。当较大的int值转换为float时可能会发生精度舍入导致信息丢失。结语没有后缀的整数字面量默认是intint - long是宽化转换允许隐式发生字面量一旦超出int范围必须显式声明为long加L否则直接编译失败如果本文对你有帮助欢迎点赞、收藏让更多正在学 Java 的同学看到。遇到问题或有不同理解可以在评论区留言一起讨论、互相学习。想系统看更多内容可以关注专栏《Java成长录》一起把基础打牢。我的博客即将同步至腾讯云开发者社区邀请大家一同入驻社区连接https://cloud.tencent.com/developer/support-plan?invite_codek6vol4aib6