当前位置: 首页 > news >正文

Java的长整型Long/long后面的数字什么情况下必须加L?

[1] 问题的由来

  在日常开发中,实体类需要序列化,一般写法如下:

public class User implements java.io.Serializable {

    private static final long serialVersionUID = 1L;
    // 用户id
    private Long user_id;
    
}

  上述代码中,private static final long serialVersionUID = 1L;,数字1后面为什么要加L

  要想彻底搞懂这个问题,我们要先理解:

  1、Java中整型直接量在没有加后缀的时候默认为int,但是当它被赋值给某个变量(这个变量是short型,int型,byte型中的一种)时,则会自动转化成相对应的类型;
  2、Java的4个整数基本类型:byte->short->int->long;
  3、向上转型、向下转型;
  4、装箱、拆箱;

  下面我们分情况讨论,定义长整型时,什么时候应该加L,什么时候可以不加L

[2] 用long定义长整型数字时

long a = 1;  // 类型int向上转型为long
long a = 1L; // 类型直接定义为long

long a = 2147483648;  // 错误 int的最大表示范围是2147483647
long a = 2147483648L; // 正确 2147483648为长整型

  上面四行代码:

  1、由于Java默认数字是int类型的,而int向上转型为long是安全的,所以第一句正确执行;
  2、数字后面加了lL后,类型变为长整型,第二句自然没问题;
  3、int能表示的数字有一定范围,超过这个范围必须加lL才不会出错,所以第三句出错,第四句正确。

【注】由第一行的代码可以联想到,为什么每次定义byte、short、int类型可以直接写,定义long类型要注意加L的情况。

[3] 用Long定义长整型数字时

Long a = 1;  // 错误 Long的自动装箱必须要求long类型的数字
Long a = 1L; // 正确 1L是long类型 自动装箱

Long a = new Long(1); // 正确 Long构造器的形参要求long类型的数字,int类型可以向上转型为long类型
Long a = new Long(1L); // 正确 1L是long类型

Long a = new Long(2147483648);  // 错误 int的最大表示范围是2147483647,表示错误
Long a = new Long(2147483648L); // 正确 2147483648为长整型

  上面六行代码:

  1、自动装箱严格要求对应的基本类型要一致,所以第1行错误第2行正确;
  2、使用构造器创建Long类型数字时,形参是long类型,int类型可以去向上转型,所以第3、4行正确;
  3、使用构造器时,必须注意int不可以超过范围。


[4] 综上可得两种必须加L的情况

  1、使用longnew Long()定义时,当数字超过int类型的表示范围时必须要在数字后加L
  2、使用Long定义时,数字必须要加L

相关文章:

  • Elasticsearch入门——kibanna和postman操作Elasticsearch索引示例
  • 【JavaEE】基于TCP的客户端服务器程序
  • 一文掌握项目估算工具及方法【管理有度13】
  • MyBatis复习
  • 智能合约审计重点
  • ZIP压缩文件如何加密?忘记密码怎么办?
  • 通过OpenDDSSharp在.NET应用程序中使用OpenDDS
  • 爆肝9万字,我已从小白晋升ARM嵌入式工程师!带你从零熟悉常用的M4嵌入式功能,建议收藏(含码源)
  • vue3.0中echarts实现中图地图的省份切换,并解决多次切换后地图卡死的情况
  • fork函数详解
  • PowerDesigner设计表时显示注释列Comment
  • SpringBoot的filter过滤器
  • Acwing---1231.航班时间
  • 小白一看就懂,交换机VLAN是如何划分的?
  • leetcode 2246. Longest Path With Different Adjacent Characters(不同相邻字母的最长路径)
  • 【蓝桥杯算法 1】AcWing166.飞行员兄弟
  • Python argparse对象与dict对象的相互转化
  • Qt图表操作(QCustomPlot 与 QtCharts的介绍与使用)
  • 代码随想录--数组相关题目整理
  • python学习笔记---IO编程【廖雪峰】