微知识:java 中 long 类型使用==比较几种不同情况

本文发布于 2024年08月28日,阅读 6 次,点赞 1 次,归类于 微知识

在Java中,long是基本数据类型,而Long是对应的包装类。这两者之间在使用==进行比较时行为有所不同,具体取决于操作数的类型。

1、当两个操作数都是基本类型long

==会比较它们的数值是否相等。

 long a = 900000001L;
 long b = 900000001L;
 if (a == b) {
     // 这个条件会成立,因为a和b的数值相等
 }

2、当两个操作数都是包装类型Long

使用==会比较它们的引用是否相同,而不是数值内容。如果两个Long对象是由不同的new操作创建的,或者它们不在Java的自动装箱缓存范围内(即不在-128127之间),那么即使它们的数值相等,==比较也会返回false

 Long c = 900000001L; // 自动装箱
 Long d = 900000001L; // 自动装箱,可能会创建另一个对象,取决于JVM实现和值是否在缓存范围内
 if (c == d) {
     // 这个条件可能不成立,因为c和d可能是不同的对象实例
     // 即使它们的数值相等,除非这个值在-128到127之间,这时会由于缓存而返回true
 }

3、当一个操作数是基本类型long,另一个是包装类型Long

在这种情况下,Java会自动拆箱(unboxing),将Long类型转换为基本类型long,然后使用==比较它们的数值。

 long e = 900000001L;
 Long f = 900000001L;
 if (e == f) {
     // 这个条件会成立,因为f会被自动拆箱为long类型,然后比较数值
 }

在技术的星河中遨游,我们互为引路星辰,共同追逐成长的光芒。愿本文的洞见能触动您的思绪,若有所共鸣,请以点赞之手,轻抚赞同的弦。

原文地址: https://www.emanjusaka.top/2024/08/java-long-compare

微信公众号:emanjusaka的编程栈