zoukankan      html  css  js  c++  java
  • Integer.parseInt(s)、Integer.valueOf(s)与new Integer()的异同

    我们在开发过程中,很多时候需要将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接收是没有任何关系的。

  • 相关阅读:
    🔥低代码音视频开发训练营火热报名中!
    编解码再进化:Ali266 与下一代视频技术
    ICCV 2021口罩人物身份鉴别全球挑战赛冠军方案分享
    提升 RTC 音频体验 从搞懂硬件开始
    只要你有目标,只要你肯努力,成功只是时间问题
    安全感到底来自何方
    工作经验小结
    女人的出路在何方?
    那些以为过去了的
    初出茅庐
  • 原文地址:https://www.cnblogs.com/JackpotHan/p/11264295.html
Copyright © 2011-2022 走看看