Integer.parseInt("") Integer.valueOf("")和new Integer("")之间的区别

Posted Heaven-Wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Integer.parseInt("") Integer.valueOf("")和new Integer("")之间的区别相关的知识,希望对你有一定的参考价值。

把一个String转换成int有Integer.parseInt("")Integer.valueOf("")new Integer("")这么几种方式,它们之间有什么区别呢?我们可以分别看一下它们的源码

//Integer.parseInt("")
public static int parseInt(String s) throws NumberFormatException 
  return parseInt(s,10);

//Integer.valueOf("")
public static Integer valueOf(String s) throws NumberFormatException 
  return Integer.valueOf(parseInt(s, 10));

//new Integer("")
public Integer(String s) throws NumberFormatException 
  this.value = parseInt(s, 10);

从源码中可以看出,Integer.valueOf("")Integer.parseInt("")内部实现是一样的,它们之间唯一的区别就是Integer.valueOf(“”)返回的是一个Integer对象,而Integer.parseInt(“”)返回的是一个基本类型的int

我们再看Integer.valueOf("")new Integer(""),它们同样返回的是一个Integer对象,但它们又有什么区别呢?我们再进入Integer.valueOf(parseInt(s, 10) )方法内部:

public static Integer valueOf(int i) 
  if (i >= IntegerCache.low && i <= IntegerCache.high)
  return IntegerCache.cache[i + (-IntegerCache.low)];
  return new Integer(i);

我们可以看到,Integer.valueOf("")会用到IntegerCache对象,当IntegerCache中存在时就从cache中取,不存在时才会调用new Integer(i)构造函数返回一个Integer对象。所以Integer.valueOf("")会用到cache,其效率可能会比用构造函数new Integer(i)

关于IntegerCache,在-127~128之间的值都会被cache,所以当我们要的值位于这个区间时返回的都是同一个实例,例如:

System.out.println(Integer.valueOf(5) == Integer.valueOf(5));
System.out.println(Integer.valueOf(500) == Integer.valueOf(500));

上面程序的运行结果是:

    false //会用到缓存
    true  //不会用到缓存

综上所述:

  • 当我们需要的是一个基本类型* int *的时候我们需要使用Integer.parseInt()函数
  • 当我们需要的是一个Integer对象类的时候我们就是用Integer.valueOf()函数

以上是关于Integer.parseInt("") Integer.valueOf("")和new Integer("")之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

Servlet.service() for servlet jsp threw exception

在JAVA里,怎样把字符串类型的数字转换为整形类型??

JAVA将时分秒格式的时间转化成秒数

Java 16进制字符串转化成十六进制数字

Integer.valueOf() 与 Integer.parseInt() [重复]

java Integer parseInt()(转)