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接收是没有任何关系的。

  • 相关阅读:
    jQuery 基本选择器
    JavaScriptif while for switch流程控制 JS函数 内置对象
    JavaScrip基本语法
    数据库 存储引擎 表的操作 数值类型 时间类型 字符串类型 枚举集合 约束
    数据库基础知识 管理员 用户登录授权的操作
    粘包的产生原理 以及如何解决粘包问题
    socket TCP DPT 网络编程
    2018年年终总结
    Android技术分享
    No accelerator found
  • 原文地址:https://www.cnblogs.com/JackpotHan/p/11264295.html
Copyright © 2011-2022 走看看