java long转integer_java中long(Long)与int(Integer)之间的转换方式

java long转integer_java中long(Long)与int(Integer)之间的转换方式我就废话不多说了 大家还是直接看代码吧 publicstatic String args 1 将 long 型转化为 int 型 其中 int long 是基础类型 longa 10 intb int a System out println 1 将 long 型转化为 int 型 b 2 将 int 型转化为 long 型 其中 int long 都是基础类型

我就废话不多说了,大家还是直接看代码吧~

public static void main(String[] args) {

// 1、将long型转化为int型,其中int、long是基础类型

long a = 10;

int b = (int) a;

System.out.println(“1、将long型转化为int型:” + b);

// 2、将int型转化为long型,其中int、long都是基础类型

int a1 = 10;

long b1 = a1;

System.out.println(“2、将int型转化为long型:” + b1);

// 3、将Long型转换为int型的,其中Long型是包装类型

Long a2 = 10l;

int b2 = a2.intValue();

System.out.println(“3、将Long型转换为int型:” + b2);

//4、将Integer型转化为long型,其中Integer型是包装类型,long型是基础类型

Integer a3=10;

long b3=a3.longValue();

System.out.println(“4、将Integer型转化为long型:”+b3);

//5、将Integer型转化为Long型,其中Integer、Long型都是包装类型

Integer a4=10;

Long b4=a4.longValue();

System.out.println(“5、将Integer型转化为Long型:”+b4);

}

输出结果:

1、将long型转化为int型:10

2、将int型转化为long型:10

3、将Long型转换为int型:10

4、将Integer型转化为long型:10

5、将Integer型转化为Long型:10

补充知识:JAVA中Long与Integer比较容易犯的错误

今天使用findbugs扫描项目后发现很多高危漏洞,其中非常常见的一个是比较两个Long或Integer时直接使用的==来比较。 其实这样是错误的。

因为Long与Ineger都是包装类型,是对象。 而不是普通类型long与int , 所以它们在比较时必须都应该用equals,或者先使用longValue()或intValue()方法来得到他们的基本类型的值然后使用==比较也是可以的。

但是有一种特殊情况, 其实Long与Integer都将 -128~127 这些对象缓存了。 可以看看Long类型源码里面有一个LongCache类,代码如下:

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 class Test05 {

public static void main(String[] args) {

Long a = 5L;

Long b = 5L;

System.out.println(“a == b ? ” + (a == b));

Long c = 129L;

Long d = 129L;

System.out.println(“c == d ? ” + (c == d));

}

}

打印的结果是:

a == b ? true

c == d ? false

原因

首先来看看 Long a = 5L ; 它是如何将一个基本类型long包装成一个对象Long的 。

可以写一个测试类,然后反编译一下,看看java它是如何解析Long a = 5L这样一条命令的 。

测试类如下:

public class Test06 {

Long l = 3L;

}

然后使用javap -verbose Test06 就能看到反编译的结果了, 下面是输出的部分:

{

java.lang.Long l;

public com.spring.test.Test06();

Code:

Stack=3, Locals=1, Args_size=1

0: aload_0

1: invokespecial #10; //Method java/lang/Object.””:()V

4: aload_0

5: ldc2_w #12; //long 3l

8: invokestatic #14; //Method java/lang/Long.valueOf:(J)Ljava/lang/Long;

11: putfield #20; //Field l:Ljava/lang/Long;

14: return

LineNumberTable:

line 3: 0

line 5: 4

line 3: 14

LocalVariableTable:

Start Length Slot Name Signature

0 15 0 this Lcom/spring/test/Test06;

}

从Code中的8可以看出调用了Long的一个类方法Long.valueOf(Long) , 所以可以得到的结论是Long a = 5L实际上等于 Long a = Long.valueOf(5) ;

然后再看看Long.valueOf()方法是如何定义的:

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);

}

一目了然,会先判断基本类型的值如果在-128~127之间,就会直接从LongCache里面取出缓存的对象返回,否则就new一个新的Long对象返回 。

现在就不难理解Test05程序执行得到的结果了,因为a与b等于5,在-127~128之内,所以都是直接从LongCache里面返回的一个Long对象,所以他们在使用==比较的时候,就是相等的(对于对象类型来说,==比较的是两个对象的引用指向堆中的地址) ,而c与d等于129,不在-127~128之间,所以他们他们是分别new出来的两个新的Long对象,使用==来比较自然是不相等的了。

Long重写了equals方法:

public boolean equals(Object obj) {

if (obj instanceof Long) {

return value == ((Long)obj).longValue();

}

return false;

}

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

所以对于Integer与Long的比较,最好是使用equals来比较才能确保得到我们想要的结果。

Integer与Long一样,这里就不举例了。

以上这篇java中long(Long)与int(Integer)之间的转换方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

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

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

(0)
上一篇 2026年3月18日 下午5:20
下一篇 2026年3月18日 下午5:20


相关推荐

  • C语言经典面试题_c语言常见面试题

    C语言经典面试题_c语言常见面试题100道c语言面试题2018年01月12日18:52:35cocos+unity+服务器阅读数:9166https://blog.csdn.net/themagickeyjianan/article/details/79047242题目来源:1、中兴、华为、慧通、英华达、微软亚洲技术中心等中外企业面试题目;2、C语言面试宝典(林锐《高质量编程第三版》)。说明:1、部…

    2022年8月28日
    4
  • 初中数学课程与信息技术的整合[通俗易懂]

    初中数学课程与信息技术的整合[通俗易懂]2.1基本工具介绍 22.1.1滑动的梯子上的猫 22.1.2智能画笔挥洒自如 72.1.3选了再做谋而后动 92.1.4公式输入即打即现 102.1.5动态测量功能多多 152.2文本命令应有尽有 182.2.1点可不简单 182.2.2直线面面观 222.2.3圆和圆弧很重要 232.2.4圆锥曲线条件多 242.2.5函数曲线最有用 252.2.6图形变换功能强 2…

    2022年5月12日
    43
  • supervisor使用方法

    supervisor使用方法背景自己做个 python 小项目 发现公司都是使用 supervisor 管理项目的运行状态 因此学习一下介绍 Supervisor http supervisord org 是一个用 Python 写的进程管理工具 可以很方便的用来启动 重启 关闭进程 不仅仅是 Python 进程 除了对单个进程的控制 还可以同时启动 关闭多个进程 比如很不幸的服务器出问题导致所有应用程序都被

    2026年3月17日
    2
  • html字体下划线取消,取消下划线与显示下划线设置

    html字体下划线取消,取消下划线与显示下划线设置a标签下划线和勾销下划线样式text-decoration配置篇以下介绍DIVCSS组织时刻,默许情况下A超链接锚文本下划线几种情况兼容各阅读器设置装备摆设。1、取消A默认下划线在CSS代码中最前面设置CSS以下:a{text-decoration:none}多么就可设置默认状况下超链接标签A字体无论是默许情况下照常鼠标悬停超链接字体均不闪现下划线。2、兼容各大涉猎器默许A超链接全显示下划线岂论…

    2022年5月26日
    45
  • 大数据挖掘有哪些技术

    大数据挖掘有哪些技术  数据挖掘技术虽是一项新兴的数据处理技术,但其发展速度十分迅猛,至今已经形成了决策树、神经网络、统计学习、聚类分析、关联规则等多项数据挖掘技术,极大的满足了用户的需求。  1、决策树算法  决策树算法是分类和预测的常用技术之一,可用于深入分析分类问题,使用时,决策树能够利用预测理论对多个变量中进行分析,从而预测处任一变量的发展趋势和变化关系;除此以外,还能对变量发展趋势进行双向预测,既能进行正向预测,也能进行反向预测,因此具有方便灵活的优势。  2、神经网络算法  神经网络是将计算机技术与

    2022年6月29日
    29
  • OpenCV—直线拟合fitLine

    OpenCV—直线拟合fitLine本文的主要参考为官方文档 OpenCV249 fitLine 和博客 OpenCV 学习 直线拟合 以及 LearningOpen page425 426OpenCV 中提供的直线拟合 API 如下 voidfitLine InputArraypo OutputArrayl intdistType doubleparam doublerep

    2026年3月17日
    2

发表回复

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

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