在Java中判断两个Long对象是否相等
作者:李白csdn 发布时间:2022-09-01 11:22:10
标签:Java,Long对象,相等
抛出问题:
Long a = 4l;
Long b = 4l;
a == b //true
Long a = 128l;
Long b = 128l;
a == b //false
如果Long的值在[-127,128]之间,用“==”判断是否相等是没问题的,如果不在这个区间,是不能用“==”的,原因如下源码解释:
public static Long valueOf(long l) {
final int offset = 128;
if (l >= -128 && l <= 127) { // will cache
return LongCache.cache[(int)l + offset];
}
return new Long(l);
}
如果不在[-127,128]之间,则会new一个新对象,自然“==”两个不同的对象,其结果必然是false了。
解决方案:
1、使用Long中的longValue()进行转换
Long a = 128l;
Long b = 128l;
a.longValue() == b.longValue() //true
2、使用Long中的equals()
Long a = 128l;
Long b = 128l;
a.equals(b);//true
下面是该方法源码:
public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}
两个Long类型比较存在的坑
一般来说,两个基本数据类型比较用 “==” 就可以了,平时很少用Long类型比较。
但是最近写项目时遇到了两个Long类型比较,当时也是直接用的双等于,然而当debug时却发现代码执行到这两个Long类型比较判断时并没有进入这个判断体内,然后上网搜索相关的问题, 其实很简单,但是不知道的话就很很容易入坑。
解决方法具体如下:
可以让两个Long类型的变量分别调用 ==longValue()== 方法来实现就可以了。
代码:
Long a=...;
Long b=...;
if (a.longValue() == b.longValue()) {
...;
}
其实Long是java数据包装类的一种,以上属于包装类Long转化为基本数据类型long的情况,以下列举其它数据包装类拆箱转化为基本数据类型的情况:
Integer转为int,需要调用intValue()方法
Double转为double,需要调用doubleValue()方法
Float转为float,需要调用floatValue()方法
总结:
某包装类Xxx转为对应的基本数据类型时,则调用xxxValue()方法。
来源:https://blog.csdn.net/zjl_pcw/article/details/79969183
0
投稿
猜你喜欢
- 1. Spring Boot Condition功能与作用@Conditional是基于条件的自动化配置注解, 由Spring 4框架推出的
- web.xml中设置:<servlet> <servlet-name>DisplayChart</servle
- 本文为大家分享一个非常简单但又很常用的控件,跑马灯状态的TextView。当要显示的文本长度太长,又不想换行时用它来显示文本,一来可以完全的
- 本文实例讲述了java基于JDBC连接Oracle 11g Release2的方法。分享给大家供大家参考。具体如下:Oracle 11g R
- 前言假设项目打包后,项目结构为:此时如果需要再windows环境中进行项目的启动或关闭,需要频繁的手敲命令,很不方便。此时可以编写.bat脚
- 原来一直使用shiro做安全框架,配置起来相当方便,正好有机会接触下SpringSecurity,学习下这个。顺道结合下jwt,把安全信息管
- 本文实例为大家分享了Android微信摇一摇功能的实现方法,供大家参考,具体内容如下import java.util.ArrayList;
- SimpleDateFormat进行日期格式化1.为啥要用SimpleDateFormat众所周知,Java中的日期类是Date,然后日期默
- 分享一个在项目中用的到文件上传下载和对图片的压缩,直接从项目中扒出来的:)package com.eabax.plugin.yundada.
- IDEA快速搭建spring boot项目1.创建项目老规矩,点击Create New Project2.编写控制器在com.demo.sp
- String password = RandomUtil.generateString(10);源码如下:package com.javan
- 匿名内部类:先举个例子吧,给大家看一下什么是匿名内部类,Endeavor刚刚接触的时候,觉得哇哦,好奇怪的样子,这也太别扭了吧,不知道大家是
- 做消息通信,消息会不断从网络流中取得,而后台也有线程不断消费。本来我一直是使用一些线程安全标识或方法来控制,后来在网上找到一些java新特性
- 1.首先,八种基本数据类型分别是:int、short、float、double、long、boolean、byte、char; &
- 因为某个项目需要,为团队其他兄弟姐妹开发了一个 XML 分析处理器,并将其设计为一个类库,提供相应的 API 接口。为了方便大家的使用,需要
- 1.导包(1)c3p0 数据库连接池c3p0配置文件加入到src目录下(2)dbutils:对jdbc操作进行了封装it-cast工具包 包
- 1、首先创建一个测试实体类Person,并携带如上注解,其注解的作用描述在messagepackage com.clickpaas.pojo
- 建造者模式概述建造者模式(Builder Pattern)属于创建型模式。它是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同
- 本文的目的是要实现左右滑动的指引效果。那么什么是指引效果呢?现在的应用为了有更好的用户体验,一般会在应用开始显示一些指引帮助页面,使用户能更
- 本文实例讲述了Java抛出异常与自定义异常类。分享给大家供大家参考,具体如下:异常处理常用方法:常用的异常处理方法有:一、try()catc