Integer.parseInt("") Integer.valueOf("")和new Integer("")之间的区别

简介: 把一个String转换成int有Integer.parseInt("")、 Integer.valueOf("")和new Integer("")这么几种方式,它们之间有什么区别呢?我们可以分别看一下它们的源码//Integer.parseInt("")public static int parseInt(String s) throws NumberFormatExc

把一个String转换成int有Integer.parseInt("")Integer.valueOf("")new Integer("")这么几种方式,它们之间有什么区别呢?我们可以分别看一下它们的源码

//Integer.parseInt("")
public static int parseInt(String s) throws NumberFormatException {
  return parseInt(s,10);
}
//Integer.valueOf("")
public static Integer valueOf(String s) throws NumberFormatException {
  return Integer.valueOf(parseInt(s, 10));
}
//new Integer("")
public Integer(String s) throws NumberFormatException {
  this.value = parseInt(s, 10);
}

从源码中可以看出,Integer.valueOf("")Integer.parseInt("")内部实现是一样的,它们之间唯一的区别就是Integer.valueOf(“”)返回的是一个Integer对象,而Integer.parseInt(“”)返回的是一个基本类型的int

我们再看Integer.valueOf("")new Integer(""),它们同样返回的是一个Integer对象,但它们又有什么区别呢?我们再进入Integer.valueOf(parseInt(s, 10) )方法内部:

public static Integer valueOf(int i) {
  if (i >= IntegerCache.low && i <= IntegerCache.high)
  return IntegerCache.cache[i + (-IntegerCache.low)];
  return new Integer(i);
}

我们可以看到,Integer.valueOf("")会用到IntegerCache对象,当IntegerCache中存在时就从cache中取,不存在时才会调用new Integer(i)构造函数返回一个Integer对象。所以Integer.valueOf("")会用到cache,其效率可能会比用构造函数new Integer(i)

关于IntegerCache,在-127~128之间的值都会被cache,所以当我们要的值位于这个区间时返回的都是同一个实例,例如:

System.out.println(Integer.valueOf(5) == Integer.valueOf(5));
System.out.println(Integer.valueOf(500) == Integer.valueOf(500));

上面程序的运行结果是:

    false //会用到缓存
    true  //不会用到缓存

综上所述:

  • 当我们需要的是一个基本类型* int *的时候我们需要使用Integer.parseInt()函数
  • 当我们需要的是一个Integer对象类的时候我们就是用Integer.valueOf()函数
目录
相关文章
|
定位技术
百度地图拾取经纬度转为标准GEOJSON格式的函数解决方案
百度地图拾取经纬度转为标准GEOJSON格式的函数解决方案
396 0
|
10月前
|
JSON 人工智能 自然语言处理
小模型也能有类o1的慢思考能力?使用CAMEL生成CoT数据、Unsloth微调Qwen2.5-1.5B模型并上传至Hugging Face
本项目利用CAMEL生成高质量的CoT数据,结合Unsloth对Qwen2.5-1.5B模型进行微调,并将结果上传至Hugging Face。通过详细步骤介绍从数据生成到模型微调的完整流程,涵盖环境配置、API密钥设置、ChatAgent配置、问答数据生成与验证、数据转换保存、模型微调及推理保存等内容。最终展示了如何优化问答系统并分享实用技巧。 [CAMEL-AI](https://github.com/camel-ai/camel) 是一个开源社区,致力于智能体扩展研究。欢迎在GitHub上关注并加入我们!
1135 15
|
JSON 数据处理 数据格式
Python中JSON结构数据的高效增删改操作
Python中JSON结构数据的高效增删改操作
170 0
|
Python
Python赋值运算符
【6月更文挑战第27天】Python赋值运算符。
92 6
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
170 1
|
存储 Windows
GitHub+PicGo+Typora搭建个人免费图床并实现md粘贴即上传
本文介绍基于Github平台与PicGo工具,构建免费、稳定的图床,并实现在Typora内撰写Markdown文档时,粘贴图片就可以将这一图片自动上传到搭建好的图床中的方法~
1267 3
GitHub+PicGo+Typora搭建个人免费图床并实现md粘贴即上传
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的计算机实验室排课与查询系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的计算机实验室排课与查询系统的详细设计和实现(源码+lw+部署文档+讲解等)
134 0
|
存储 缓存 运维
多医院版检验科云LIS系统源码 B/S架构 SaaS模式
SaaS模式.Net Core版云LIS系统源码,在第三方快检实验室、二级医院检验科等成熟运营5年以上,系统运行稳定、功能齐全,界面布局合理、操作简便。 1、预设几十种报告模板,支持个性化报告出具和服务端单独队列生成报告,可在几分钟内批量生成报告。 2、全套系统采用云部署模式,部署一套可支持多家医院检验科共同使用。 3、适用于二级医院、基层医疗机构,可作为区域LIS使用,经扩展后能够无缝对接医共体平台等公共平台或系统。 4、具有独立的配套SaaS模式运维管理系统,支持远程运维,运维功能丰富、方便易用。 5、系统技术特点:采用.Net Core新的技术框架、DEV报表、前端js封装、分布式文件存
390 0
多医院版检验科云LIS系统源码  B/S架构 SaaS模式
|
机器学习/深度学习 算法 搜索推荐
使用向量机(SVM)算法的推荐系统
使用向量机(SVM)算法的推荐系统
330 0
|
SQL Dubbo 关系型数据库
手把手教你分析解决MySQL死锁问题
手把手教你分析解决MySQL死锁问题 在生产环境中如果出现MySQL死锁问题该如何排查和解决呢,本文将模拟真实死锁场景进行排查,最后总结下实际开发中如何尽量避免死锁发生。
1003 0
手把手教你分析解决MySQL死锁问题