String类型转Long类型

String类型转Long类型开发中有遇到 Long 类型比较是否相等 比如 LongA 和 LongB 判断是否相等 当时习惯性的直接 A B nbsp nbsp 自测的话确实么有问题 但是测试那边测试就有问题 当时郁闷了一下然后换成了 A equals B 或 A longValue B longValue 都是正确的 nbsp nbsp 改完 bug 觉得需要看看是为什么 通过看 Long class 可以看出 nbsp nbsp 如果值在 128 127 之间

开发中有遇到Long类型比较是否相等,比如Long A和Long B判断是否相等,当时习惯性的直接A==B;

    自测的话确实么有问题,但是测试那边测试就有问题,当时郁闷了一下然后换成了A.equals(B)或A.longValue()==B.longValue()都是正确的;

    改完bug,觉得需要看看是为什么,通过看Long.class,可以看出

String类型转Long类型String类型转Long类型

    如果值在[-128, 127]之间,会放在缓存里面,而超过这个范围就要new一个新的对象,也就是说==不能判断对象是否相等。自测的话A或者B值设置的都比较小,而测试会考虑多方便的效果,所以就GG了。

在判断两个Long型数据是否相等的时候遇到了一个问题。

使用“==”的疑问

if (user.getId() == admin.getId()) { return true; } else { return false; }
Long id1 = 123L; Long id2 = 123L; System.out.println(id1 == id2); 输出: true

同是Long型,同是==,为什么结果不一样呢?
看看源代码:

private static class LongCache { private LongCache(){} static final Long cache[] = new Long[-(-128) + 127 + 1]; static { for(int i = 0; i < cache.length; i++) cache[i] = new Long(i - 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); }

使用equals

Long重写了equals方法,如下:

public boolean equals(Object obj) { if (obj instanceof Long) { return value == ((Long)obj).longValue(); } return false; }

它是先通过.longValue()方法获取Long对象的基本类型long的值之后再做比较的。



注意:

1、首先,字符串内不能包含除数字之外的字符

原因是Long类型的最大值位Long.MAX_VALUE = ,大于这个值都会出错

Long类型的最小值位Long.MIN_VALUE=-,小于这个值也会报错



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233698.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 单模光纤和多模光纤的区别,以及作用

    单模光纤和多模光纤的区别,以及作用按传输模式分按光在光纤中的传输模式可分为:单模光纤和多模光纤。单模光纤传输距离远远大于多模光纤单模光纤只可以传送一种单一光波多模光纤可以传送多种光波单模比多模要贵,要好如果距离短,首选多模。因为LED发射/接收机比单模需要的激光便宜得多。如果距离大于5英里,单模光纤最佳。另外一个要考虑的问题是带宽:如果将来的应用可能包括传输大带宽数据信号,那么单模将是最佳选择。总结起来:L…

    2022年4月19日
    41
  • 华为9月3日或推出麒麟9000;TiDB 3.0.18 发布| 极客头条

    华为9月3日或推出麒麟9000;TiDB 3.0.18 发布| 极客头条「极客头条」——技术人员的新闻圈!CSDN的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。国内要闻华为9月3日举行IFA活动:推出麒麟9000,Mate40发布时间或确认华为宣布将于德国当地时间9月3日下午14点(北京时间20点)举办IFA2020主题演讲,预计将会推出5nm麒麟90005G处理器,并且公布Mate40系列发布时间。从目前已有的消息来看,麒麟9000处理器基于台积电5nm工艺打造,并集成华为研发的新NPU、5G基带等技术。(新浪科

    2022年6月2日
    41
  • java数组的声明_Java数组定义常用方法[通俗易懂]

    java数组的声明_Java数组定义常用方法[通俗易懂]Java数组定义常用方法Java中的数组、是一种简单的线性数据存储结构、他用牺牲自动扩展大小来换取与集合相比的唯一优势——查询效率的提升。Java中的数组有什么类型?我们要怎么定义这些数组呢?下面跟yjbys小编一起来学习Java数组定义常用方法吧!java中有两种数据类型:a)引用类型b)基础类型其中基础类型又有两种:b1)数值类型b2)及布尔类型。数组——也为java的一个数据类型、归类为引用…

    2022年6月2日
    46
  • 扒站工具整站_抓包知乎

    扒站工具整站_抓包知乎前两节说了利用浏览器或者借助仿站工具来扒站,这些方法适用于一般的web站点,对于某些不能在PC端打开的站点就比较困难了。如果只是在后台检验客户端来限制用户浏览,比如你用PC访问的时候自动转到PC页面或

    2022年8月6日
    5
  • 语音信号处理习题

    语音信号处理习题二、问答题(每题5分,共20分)1、语音信号处理主要研究哪几方面的内容?语音信号处理是研究用数字信号处理技术对语言信号进行处理的一门学科,语音信号处理的理论和研究包括紧密结合的两个方面:一方面,从语言的产生和感知来对其进行研究,这一研究与语言、语言学、认知科学、心理、生理等学科密不可分;另一方面,是将语音作为一种信号来进行处理,包括传统的数字信号处理技术以及一些新的应用于语音信号的处理方法和技术。2、语音识别的研究目标和计算机自动语音识别的任务是什么?语音识别技术,也被称为自动语音

    2022年5月13日
    50
  • 《java核心技术卷I》[通俗易懂]

    《java核心技术卷I》[通俗易懂]《java核心技术卷I》java老师讲课的内容PPT代码基本是来自于这里,感觉还不错,里面的代码也是循序渐进的。这本书本身也是老师开始讲课时推荐的或者说参考的书的第一本。

    2022年7月7日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号