`

Integer.parseInt(s) 和 Integer.valueOf(s)详细区别(转)

    博客分类:
  • java
阅读更多
今天在看jdk的源代码的时候注意到Integer.parseInt(s) 和 Integer.valueOf(s)的具体代码的实现有所区别:
Java代码

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

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


Java代码

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

    public static Integer valueOf(String s) throws NumberFormatException
    {
return new Integer(parseInt(s, 10));
    }


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

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

public static void main(String[] args) {

String a="400";
String b="400";
System.out.println(Integer.parseInt(a)==Integer.valueOf(b));//int和Integer比较,Integer自动拆箱
System.out.println(Integer.parseInt(a)==Integer.parseInt(b)); //两个基本类型比较自然没有问题。
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 

Integer c=100;
Integer d=100;
Integer c1=200;
Integer d1=200;
System.out.println(c==d); //为true
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.
分享到:
评论

相关推荐

    Java Integer.valueOf()和Integer.parseInt()的区别说明

    Java 中的 Integer 类中有两个静态方法,Integer.valueOf(String s) 和 Integer.parseInt(String s),它们都可以将字符串转换为整型,但它们之间有着很大的区别。 首先,Integer.parseInt(String s) 将会返回 int ...

    Java中Integer.valueOf,parsetInt() String.valueOf的区别和结果代码解析

    Java中Integer.valueOf、parsetInt() String.valueOf的区别和结果代码解析 Java中Integer.valueOf、parsetInt()和String.valueOf都是常用的方法,但是它们之间存在着很多的区别,下面我们将通过代码来解释它们之间...

    java 进制转换,二进制 十进制 十六进制 正数 负数的进制等等!.docx

    反之,要将其他进制的字符串转换为十进制,可以使用`Integer.valueOf()`方法,并传入基数作为第二个参数。 在上述代码示例中,`main`方法展示了如何使用这些方法进行转换: 1. `Integer.toHexString(20)`将十进制的...

    java中string和int型的相互转换.doc

    Java 中的 String 和 int 类型的相互转换是一个基本的数据类型转换操作,我们可以使用多种方法来实现这种转换,例如使用 `Integer.parseInt()` 方法、`Integer.valueOf()` 方法、`String.valueOf()` 方法等。...

    JAVA实用进制转换

    - 在使用`Integer.valueOf`和`Integer.parseInt`方法时需要注意,输入的字符串必须是有效的数字字符串,否则会抛出`NumberFormatException`异常。 - 当使用`Integer.parseInt(String s, int radix)`时,`radix`参数...

    JAVA实用进制转换.pdf

    - **十六进制转十进制**:可以使用`Integer.valueOf(String s, int radix)`方法,其中`s`是十六进制字符串,`radix`是基数(这里是16)。例如: ```java String hexValue = "FFFF"; int decValue = Integer....

    Java String转int还有其它几种写法.docx

    标题提到的"Java String转int还有其它几种写法",描述中提到了两种常见方法:`Integer.valueOf()`和`Integer.parseInt()`。以下是这些方法的详细解释: 1. **`Integer.valueOf()`方法**: `Integer.valueOf()`是...

    java中int_char_string三种类型的相互转换

    Integer integer = Integer.valueOf(str); 三、将 int 转换成 String 将 int 转换成 String 可以使用以下三种方法: 1. 使用 String.valueOf() 方法 String s = String.valueOf(i); 2. 使用 Integer.toString()...

    java哈夫曼压缩

    public void Huff()throws IOException { System.out.print("程序正huff运行!"); String s;... value[1][i]=Integer.parseInt(s); valueNode[0][i]=i; valueNode[1][i]=Integer.parseInt(s); }

    进制之间的互相转换

    十进制与八进制与十六进制之间的转换可以使用 Integer.toOctalString() 方法、Integer.toHexString() 方法和 Integer.valueOf() 方法。例如: ```java int dec = 150; String octal = Integer.toOctalString(dec);//...

    《JAVA程序设计》期末复习题.pdf

    涵盖了JAVA语言的基础知识点,包括Java Application的主类、switch语句、变量初始化、包的声明、protected变量的访问权限、charAt()方法的使用、Integer.parseInt()和Integer.valueOf()方法的区别、事件监听器的实现...

    java中String类型转换方法.pdf

    * 使用 `Integer.valueOf()` 方法:`String str = "25"; int i = Integer.valueOf(str).intValue();` 字符串到浮点型 将字符串转换为浮点型可以使用以下方法: * 使用 `Double.parseDouble()` 方法:`String str ...

    JAVA 进制转换全攻略.docx

    可以通过`Integer.valueOf(String s, int radix)`方法来实现,其中`s`是十六进制字符串,`radix`是基数(这里是16)。例如: ```java String hex = "FFFF"; int decimal = Integer.valueOf(hex, 16); // ...

    第02章 Java编程基础 03 进制与转换

    同时,`Integer.valueOf(String, int)`允许从特定进制的字符串转换回整数。 理解并熟练掌握这些进制转换方法,不仅有助于解析和构造二进制数据,还能在处理位运算、内存表示以及理解计算机底层工作原理时发挥重要...

    Integer类的使用方法

    - **valueOf方法**:`valueOf`方法可以将字符串或特定进制的字符串转换为`Integer`对象。 ```java Integer i = Integer.valueOf("1234"); // 或者 Integer.valueOf("1234", 8); 如果字符串是八进制表示 ``` 总之...

    java 源码 (数字转换2)

    将字符串解析为整数,可以使用`Integer.parseInt()`或`Integer.valueOf()`。如果字符串包含非数字字符,这些方法会抛出`NumberFormatException`。例如: ```java String strNum = "456"; int num = Integer....

Global site tag (gtag.js) - Google Analytics