跳转到主要内容

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

Avatar emanjusaka
统计中…
183
1
java 中 long 类型使用==比较几种不同情况

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

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

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

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

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

使用==会比较它们的引用是否相同,而不是数值内容。如果两个Long对象是由不同的new操作创建的,或者它们不在Java的自动装箱缓存范围内(即不在-128到127之间),那么即使它们的数值相等,==比较也会返回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类型,然后比较数值
 }

本文由 emanjusaka 创作,发表于 www.emanjusaka.com,采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

❋

微信扫码分享

微博
点赞是美意,赞赏是鼓励。如有帮助,可以关注下微信公众号。
微信 微信
支付宝 支付宝
查看赞赏名单 →
评论
← 上一篇 @ConfigurationProperties 失效的一种特殊情况 下一篇 → 过滤器和拦截器的区别?