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

简介: 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

相关文章
【面试题精讲】Java超过long类型的数据如何表示
【面试题精讲】Java超过long类型的数据如何表示
|
Java C++
Java整型变量和整型常量
Java整型变量和整型常量
148 0
|
3月前
|
Java 数据库连接 mybatis
成功解决:java.lang.Integer cannot be cast to java.lang.Long
这篇文章讨论了Java中常见的类型转换错误,包括Integer转Long、Integer转String以及在MyBatis中Map接收查询结果时的类型不匹配问题,并提供了相应的解决方法。
|
3月前
|
前端开发 Java 数据库
Java系列之 Long类型返回前端精度丢失
这篇文章讨论了Java后端实体类中Long类型数据在传递给前端时出现的精度丢失问题,并提供了通过在实体类字段上添加`@JsonSerialize(using = ToStringSerializer.class)`注解来确保精度的解决方法。
|
Java 编译器 数据库连接
Cause java.sql.SQLDataException Unsupported conversion from LONG to java.sql.Timestamp
Cause java.sql.SQLDataException Unsupported conversion from LONG to java.sql.Timestamp
683 0
|
5月前
|
Java 数据库连接
手搓JDBC时报错 java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
手搓JDBC时报错 java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
101 1
|
5月前
|
JavaScript Java
Java long传到前台精度损失解决方案
Java long传到前台精度损失解决方案
41 1
|
5月前
|
资源调度 关系型数据库 MySQL
实时计算 Flink版操作报错合集之遇到如下报错:java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
246 0
|
6月前
|
存储 安全 Java
Java整型数据详解
Java整型数据详解
62 0
|
6月前
|
Java
【Java探索之旅】数据类型与变量 字面常量 整型变量
【Java探索之旅】数据类型与变量 字面常量 整型变量
59 0

热门文章

最新文章