博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Integer.parseInt()和Integer.valueOf()有什么区别
阅读量:6206 次
发布时间:2019-06-21

本文共 1237 字,大约阅读时间需要 4 分钟。

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有没有);

---
专门去看了一下,在上有清楚的说明:

引用

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.

转载地址:http://cxwja.baihongyu.com/

你可能感兴趣的文章
django框架预备知识
查看>>
构建之法阅读笔记04
查看>>
免费图标网站
查看>>
Android布局属性详解之RelativeLayout
查看>>
sqlserver中 事物 索引及视图
查看>>
NOIP2011 铺地毯
查看>>
MySQL学习【第十二篇事务中的锁与隔离级别】
查看>>
在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试
查看>>
Struts2国际化
查看>>
江西理工大学南昌校区cool code竞赛
查看>>
循环Map方法
查看>>
nib和xib的区别
查看>>
== 和 is 的区别
查看>>
Selenium2Library+ride学习笔记
查看>>
OSPF RFC2740
查看>>
OBJECT_ID()的使用方法
查看>>
'800a0005' 图片上传出现写入文件失败的错误 -- 修改pload_5xsoft.inc
查看>>
[Egret][文档]遮罩
查看>>
sql的split()函数
查看>>
建造者模式
查看>>