zoukankan      html  css  js  c++  java
  • Integer.parseInt()和Integer.valueOf()有什么区别

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

    Java代码 收藏代码

    1. public static int parseInt(String s) throws NumberFormatException { 
    2. return parseInt(s,10); 
    3.    } 

    Java代码 收藏代码

    1. public static Integer valueOf(String s) throws NumberFormatException 
    2.    { 
    3. return new Integer(parseInt(s, 10)); 
    4.    } 

    注意到返回值型明显不同,但由于jdk1.5之后的自动装箱和拆箱,很多时候容易引起大家的混淆:

    Java代码 收藏代码

    1. public static void main(String[] args) { 
    2. String a="400"; 
    3. String b="400"; 
    4. System.out.println(Integer.parseInt(a)==Integer.valueOf(b));//int和Integer比较,Integer自动拆箱
    5. System.out.println(Integer.parseInt(a)==Integer.parseInt(b)); //两个基本类型比较自然没有问题。
    6. System.out.println(Integer.valueOf(a)==Integer.valueOf(b)); //两个Integer对象比较,输出为false

    下面这段代码是浪曦的教程上的:

    Java代码 收藏代码

    1. Integer c=100; 
    2. Integer d=100; 
    3. Integer c1=200; 
    4. Integer d1=200; 
    5. System.out.println(c==d); //为true
    6. System.out.println(c1==d1);//为false

    教程的解释是:单字节(-128-127)的Integer比较是直接作为基本类型比较,否则是对象比较。我觉得这个说法比较牵强--虽然实践的结果是这样,等下将研究一下Autoboxing/Auto- Unboxing的具体实现代码看看(传闻是在编译中实现的,代码不好找,看看openjdk有没有);
    ---
    专门去看了一下java语言规范,在5.1.7 Boxing Conversion上有清楚的说明:

    引用

    If the value p being boxed is true, false, a byte, a char in the range u0000 to u007f, or an int or short number between -128 and 127, then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2.

  • 相关阅读:
    ASP.NET部署前环境检测
    (转)基于.Net的单点登录(SSO)解决方案(1)
    Easy UI 勾选单选框
    Sqlserver 自定义函数
    MVC站点安全开发
    (转)基于.Net的单点登录(SSO)解决方案(2)
    ASP.NET站点跨子域名单点登陆(SSO)的实现
    角色权限功能点设置页面
    XmlHelper
    MVC错误处理(三)
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/3581308.html
Copyright © 2011-2022 走看看