我们在开发过程中,很多时候需要将String类型数据转换成Integer,而比较常用的方式就是--nteger.parseInt(s)、Integer.valueOf(s)与new Integer(),那么他们具体有那些异同呢?

首先我先介绍一下这三种方式的使用方法吧。

Integer.parseInt(s)用法

Integer.parseInt(s)的作用就是把字符串s解析成有符号的int基本类型。

String s1 = "1234";
String s2 = "1234";
int n1 = Integer.parseInt(s1);
int n2 = Integer.parseInt(s2);
System.out.println(n1 == n2? "Integer.parseInt(s1) == Integer.parseInt(s2)":"Integer.parseInt(s1) != Integer.parseInt(s2)");
-------------------------
Integer.parseInt(s1) == Integer.parseInt(s2)

Integer.valueOf(s)用法

Integer.valueOf(s)把字符串s解析成Integer对象类型,返回的integer 可以调用对象中的方法。

String s = "1234";
Integer integer = Integer.valueOf(s);
System.out.println("integer : " + integer);
int n1 = Integer.parseInt(s1);
int n2 = Integer.parseInt(s2);
System.out.println(n1 == n2? "Integer.parseInt(s1) == Integer.parseInt(s2)":"Integer.parseInt(s1) != Integer.parseInt(s2)"); --------------
1000
Integer.parseInt(s1) == Integer.parseInt(s2)

new Integer(s)用法

Integer i = new Integer("1234");
Integer j = 1234;
System.out.print(i == j);
-------------------
false

因为 Integer变量 指向的是 java 常量池 中的对象,
而 new Integer() 的变量指向 堆中 新建的对象,两者在内存中的地址不同。

三者的区别

Integer.parseInt(s)多次解析同一个字符串得到的int基本类型数据是相等的,可以直接通过“==”进行判断是否相等。

ps: int是基本类型,不含有equals方法,所以只能用“==”比较,基本类型用“==”比较的是两个值的大小。

Integer.valueOf(s)多次解析相同的一个字符串时,得到的是Integer类型的对象,得到的对象有时是同一个对象,有时是不同的对象,要根据把s字符串解析的整数值的大小进行决定:如果s字符串对应的整数值在 -128~127之间,则解析出的Integer类型的对象是同一个对象;如果s字符串对应的整数值不在-128~127之间,则解析出的Integer类型的对象不是同一个对象。

ps:不管对象是否相等,对象中的value值是相等的。
new Integer(s) s字符串对应的整数值在-128到127之间,可时直接从常量池获取;s字符串对应的整数值不在-128~127之间需要在堆内存开辟一块空间存储该值,取值的时候根据栈中地址映射到堆内存中。

ps:当s字符串对应的整数值为1000,不在-128~127之间,通过Integer.valueOf(s)、new Integer(s)解析出的两个对象i1和i2是不同的对象,对象中的value值是相同的。

三者的联系

Integer.parseInt(s)是把字符串解析成int基本类型,Integer.valueOf(s)和new Integer(s)是把字符串解析成Integer对象类型,其实int就是Integer解包装,Integer就是int的包装,在jdk8中已经自动实现了自动解包装和自动包装,所以两种方式都能得到想要的整数值。

结束语

当我们需要的是一个基本类型int 的时候我们需要使用Integer.parseInt()函数

当我们需要的是一个Integer对象类的时候我们就是用Integer.valueOf()函数,new Integer()的方式我个人不是很喜欢。

当我们确定需要转换的数值范围在-127~128,最好选择Integer.parseInt(),当然选择int和Integer接收是没有任何关系的。

Integer.parseInt(s)、Integer.valueOf(s)与new Integer()的异同的更多相关文章

  1. Java中Integer.parseInt和Integer.valueOf,你还傻傻分不清吗?

    在Java的Integer类中,有Integer.valueOf(String s)和Integer.parseInt(String s)两个静态方法,他们都能够将字符串转换为整型,他们到底有什么区别 ...

  2. 【夯实基础】- Integer.valueof()和Integer.parseInt()的区别

    今天在看公司代码的时候,看到有人在将 String 转为 int 时,用到了Integer.parseInt(String s)方法,我一直用的是Integer.valueOf(String s)方法 ...

  3. Integer.valueof(String s)和Integer.parseInt(String s)的具体区别是什么?

    Integer.valueof(String s)和Integer.parseInt(String s)的具体区别是什么? Integer.valueof(String s)是将一个包装类是将一个实际 ...

  4. Integer.parseInt(String s) 和 Integer.valueOf(String s) 的区别

    通过查看java.lang.Integer的源码可以发现, 它们最终调用的都是 /** * Parses the string argument as a signed integer in the ...

  5. Integer.parseInt()和Integer.valueOf()有什么区别

    jdk的源代码的时候注意到Integer.parseInt(s) 和 Integer.valueOf(s)的具体代码的实现有所区别: Java代码 public static int parseInt ...

  6. Integer.valueOf与Integer.parseInt的小疑惑

    参考博客: http://www.importnew.com/9162.html 测试代码如下: public class Main { /** * 备注:结果跟你的JDK版本有关系: * * 我的是 ...

  7. Integer.parseInt()和valueOf()

    parseInt("1")返回的是int类型,所以如果想要将一个String类型的数字串转为原始类型int ,建议使用这个方法, 而不是使用 valueOf("1&quo ...

  8. Integer.valueOf()与Integer.parseInt()区别

    Integer.parseInt()和Integer.valueOf()有本质区别,具体如下列: Integer.parseInt()把String   型转换为Int型,  Integer.valu ...

  9. Integer.parseInt vs Integer.valueOf

    一直搞不清楚这两个有什么区别.刚才特意查了一下帖子. Integer.parseInt 返回的是 primitive int Integer.valueOf  返回的是 Integer Object ...

随机推荐

  1. HTML/JavaScript实现地图以鼠标为圆心缩放和移动

    代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  2. from selenium.webdriver.chrome.options import Options中add_argument 常用参数表收集

    chrome_options.add_argument("xxx") 序号 参数 说明 1 --allow-outdated-plugins 不停用过期的插件. 2 --allow ...

  3. vjudge A^B Mod C 然后,10.6最。。。的 快速幂!!!

    链接:https://vjudge.net/contest/331993#problem/D 给出3个正整数A B C,求A^B Mod C. 例如,3 5 8,3^5 Mod 8 = 3. Inpu ...

  4. springboot整合PageHelper

    1.在pom文件中引入Pagehelper分页插件 <!-- 分页插件 --> <dependency> <groupId>com.github.pagehelpe ...

  5. Git 版本回退的几种操作方法

    1, 结合使用 git reset --hard <commit id> , git reset --hard HEAD^,  git reflog , git log 1) 使用 git ...

  6. dataTables插件的使用

    用到dataTables这个插件还是因为Metronic这个框架里有用到,不然我不会选择它的,为啥呢?就感觉它的文档有点复杂(当然,也有我智商不够用的原因):既然用了,那就说说我遇到的问题吧,以防下次 ...

  7. PHP获取小程序码并返回前端显示图片

    小程序的二维码分为小程序码和二维码: 生成小程序二维码文档中说后端来生成. 参考 小程序开发文档资料:https://developers.weixin.qq.com/miniprogram/dev/ ...

  8. solr 对于 关键字的特殊处理

    public static String transformMetachar(String input){      StringBuffer sb = new StringBuffer();     ...

  9. 2018护网杯easy_tornado(SSTI tornado render模板注入)

    考点:SSTI注入 原理: tornado render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页,如果用户对render内容可控,不仅可以注入XSS代码,而且 ...

  10. 1、安装gitlab

    1.安装Gitlab Gitlab分为社区版和企业版(收费),这里安装的是ce社区版本 方式一: Gitlab官方有提供好的rpm包仓库,所以采用yum安装即可. [root@localhost ~] ...