Integer.valueOf()和Integer.parseInt()的区别
直接上源码:
Integer.parseInt(String s)的源码:
// 返回int常量
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
Integer.valueOf(String s)的源码:
// 返回Integer类型的对象
public static Integer valueOf(String s) throws NumberFormatException {
return 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() 和 Integer.parseInt() 的底层都用到了Integer.parseInt(String s ,int radix)这个方法,这个方法将字符串作为有符号的十进制整数进行解析,
并返回一个int类型的值。而Integer.valueOf(String s)中又调用了public static Integer valueOf(int i) ,通过上面的源码可以看到当int数值在-128和127之间的时候,会直接从cache中获取一个
已存在Integer对象,所以当我们需要的值位于这个区间时返回的都是同一个实例,如果不在这个范围内的数字,则会调用new Integer(i) 创建一个新的对象。
实例:
//true,会用到缓存
System.out.println(Integer.valueOf(6) == Integer.valueOf(6));
//false,不会用到缓存
System.out.println(Integer.valueOf(600) == Integer.valueOf(600));
//true,equals比较的值,返回true
System.out.println(Integer.valueOf(6).equals(Integer.valueOf(6)));
//true,equals比较的值,返回true
System.out.println(Integer.valueOf(600).equals(Integer.valueOf(600)));
在《阿里巴巴Java开发手册》中,也有对包装类对象比较的说明,内容如下:
所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较(即包装类都推荐用equals方法比较,Sting/Long/Boolean也是如此)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理