Java中long和Long赋值加L

本文探讨了Java中处理超出int范围的大整数的方法,并解释了如何使用long类型及Long.parseLong()函数。同时介绍了基本类型与包装类的区别,以及内存机制。

在Java中执行如下的代码:

long number = 26012402244;
        编译的时候会出现一个错误,提示“过大的整数: 32322355744”,如果在Eclipse中书写上面的代码,提示的是“The literal 26012402244 of type int is out of range”。可以看出,在Java代码中直接书写的数字是int类型的,就是说数字的范围在 -2^31 到 2^31 - 1 这个范围之中,无论将这个数字赋值给什么类型。

不过有的时候需要直接赋值大的数字,比如在测试的时候。这个时候可以使用Long.parseLong()转换下就可以啦。这个时候可以这样赋值:

long number = 26012402244L;

 

Java的数据类型分两种:
1.基本类型:long,int,byte,float,double,char
2. 对象类型(类): Long,Integer,Byte,Float,Double,Char,String,其它一切java提供的,或者你自己创建的类。

其中Long又叫 long的包装类。

什么叫包装类?
在java中有时候的运算必须是两个类对象之间进行的,不充许对象与数字之间进行运算。所以需要有一个对象,这个对象把数字进行了一下包装,这样这个对象就可以和另一个对象进行运算了。
比如我们也可以定义一个类:
class Long {
int i=0;
public Long (int i){
this.i=i;
}
}

这样这个Integer就是一个包装类,他包装了一个整数值,然后可以在里面写一些运算符重载的方法使它支持某些运算。这个时候可以赋值:
Long it=new Long(10);
现在变量it就是一个对象,不是一个数字。

long l1 = 10000000000L;(内存机制)
实际上内存中l1只是一个long类型的变量,它存在于向stack(栈)中,数值并不在其中存放,它指向heap(堆)中另一块真正存放数值的内存,加L的目的就是为了让heap中也创建一块long类型所需要的内存,用来来放数值。
所以说=前后两者其实是在不同的两块内存,只不过有个无形的指针将两者连接起来了。

java程序 long l1=12345678,l2=8888888888L; 这里12345678后面不需要加L,为什么?

类型自动转换

Java 中,`long` 是基本数据类型,`Long` 是其对应的包装类,二者有如下区别使用方式: ### 区别 - **可空性**:包装类型 `Long` 可以为 `null`,而基本类型 `long` 不可以。这意味着 `Long` 变量可以不指向任何对象,而 `long` 变量必须有一个具体的值。例如,在某些情况下,可能需要表示一个缺失或未知的 `long` 值,使用 `Long` 就可以将其赋值为 `null`,而 `long` 无法表达这种状态 [^2]。 - **类型本质**:`long` 是 Java 的基本数据类型,直接存储在内存中,并以二进制形式表示。而 `Long` 是一个类,是 `long` 基本数据类型的对象表示。 - **方法特性**:`Long` 作为一个类,具有对象的方法特性,可以调用类中的方法。数值包装类 `Long` 扩展于抽象类 `Number`,`Number` 类包含有 `doubleValue()`、`floatValue()`、`intValue()`、`longValue()`、`shortValue()` `byteValue()` 方法,通过这些方法可以返回对象的基本类型值。并且 `Long` 类覆盖了 `Object` 类中的 `toString()` `equals()` 方法,另外还实现了 `Comparable` 接口的 `compareTo` 方法。而 `long` 只是一个简单的数据存储单元,没有这些方法 [^3]。 ### 使用 - **`long` 的使用**: ```java // 声明并初始化一个 long 类型的变量 long num = 123456789L; // 进行基本的数学运算 long result = num * 2; ``` - **`Long` 的使用**: ```java // 声明并初始化一个 Long 类型的变量 Long numObj = new Long(123456789L); // 使用构造函数传入字符串创建 Long 对象 Long numObj2 = Long.valueOf("123456789"); // 调用 Long 类的方法 long primitiveNum = numObj.longValue(); String str = numObj.toString(); int comparison = numObj.compareTo(numObj2); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值