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.

Integer.parseInt()和Integer.valueOf()有什么区别的更多相关文章

  1. Integer.parseInt vs Integer.valueOf

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

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

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

  3. Integer.parseInt()和Integer.valueOf()方法详解

    1.Integer.parseInt(): public static int parseInt(String s) throws NumberFormatException { return par ...

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

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

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

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

  6. java Integer.valueOf 和 Integer.parseInt 和 new Integer区别及注意事项

    先看一下下面的结果 1.System.out.println(127==127); //true , int type compare 2.System.out.println(128==128); ...

  7. Integer.valueof 和 Integer.parseInt

    System.out.println(Integer.valueOf("127")==Integer.valueOf("127")); System.out.p ...

  8. Integer.parseInt(s)、Integer.valueOf(s)与new Integer()的异同

    我们在开发过程中,很多时候需要将String类型数据转换成Integer,而比较常用的方式就是--nteger.parseInt(s).Integer.valueOf(s)与new Integer() ...

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

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

随机推荐

  1. 2016 - 1 - 22 HTTP(二)

    一: 发送HTTP请求的方法 1.在HTTP/1.1中规定了8种发送请求的方法: 2.发送请求时需要参数,比如POST中的账号密码 二:POST与GET的对比 1.GET与POST的主要区别表现在数据 ...

  2. linux基础命令学习(四)计划任务

    一.计划任务 crond服务简介 linux任务调度的工作主要分为以下两类: *系统执行的工作:系统周期性所要执行的工作,如备份系统数据.清理缓存 *个人执行的工作:某个用户定期要做的工作,例如每隔1 ...

  3. Motorola C118修改滤波器组件

    所需工具: 热风枪.恒温焊台.镊子.助焊膏.锡丝.滤波器组件 关于怎么使用热风枪拆屏蔽盖将在后期更新视频,以下为修改滤波器流程.以下热风枪设置温度只针对快克957DW(不同品牌风枪和型号可能会有温差) ...

  4. HDU 4405

    http://acm.hdu.edu.cn/showproblem.php?pid=4405 题意:飞行棋,可以跳,从0走到n,问期望步数 题解:dp[i]表示从i走到n的期望,逆推,因为每次都要走一 ...

  5. this的指向及应用

    this的指向: //this 指的是调用 当前方法 (函数) 的那个对象 function fn1(){ this; } //fn1(); this => window //obj.oncli ...

  6. 内存回收,Dispose,Close,Finalie(C#中的析构函数)

    NET中的资源分托管和非托管,所谓的托管是指CLR(通用语言运行时)中进行管理的资源,它可以由CLR自动进行内存回收. 也就是大家熟知的GC(垃圾回收机制). 而对于 非托管资源,比如数据库连接,CO ...

  7. 《JavaScript Ninja》之函数是根基

    函数是根基 理解函数为什么如此重要 JavaScript 是一门 函数式语言 . 函数为什么是第一型对象 在 JavaScript 中,函数可以共处,可以将其视为其他任意类型的 JavaScript ...

  8. 【avalon】parseData

    <div data-a="true" data-b="false" data-d="5" data-e="null" ...

  9. xp 共享 guest

    一.首先启用guest来宾帐户 二.控制面板→管理工具→本地安全策略→本地策略→用户权利指派里,“从网络访问此计算机”中加入guest帐户,而“拒绝从网络访问这台计算机”中删除guest帐户: 三.我 ...

  10. 初识mySQL(关系型数据库)

    一.数据库修改密码 ①先执行use mysql; ②再执行update  mysql.user  set  password=PASSWORD(要修改的密码) where  user='root' ; ...