Java7 将字符串转换为数字

想一想在 JDK 1.7 之前,下面这段代码的结果是什么:

package com.hxstrive.jdk6.number;

/**
 * 验证 JDK6 解析 “+1” 字符串
 * @author hxstrive.com
 */
public class NumberDemo1 {

    public static void main(String[] args) {
        double x = Double.parseDouble("+1.0");
        System.out.println("x = " + x);

        int n = Integer.parseInt("+1");
        System.out.println("n = " + n);
    }

}

如果你知道结果,那应该给自己一点奖励:+1.0 一直都表示一个有效的浮点数,但是在 Java7 之前,+1 一直不是一个有效的整数。

运行示例,结果如下:

D:\jdk1.6.0_43\bin> java Demo1      
x = 1.0
Exception in thread "main" java.lang.NumberFormatException: For input string: "+1"      
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
        at java.lang.Integer.parseInt(Integer.java:449)
        at java.lang.Integer.parseInt(Integer.java:499)
        at Demo1.main(Demo1.java:11)

JDK7 之前,“+1” 运行会报 NumberFormatException 错误。

庆幸,现在,这个问题已经在所有通过字符串来构造 int、long、short、byte 和 BigInteger 的方法中被修复了。

这个问题所影响的方法可能远远超出你的想象,除了 parse(Int|Long|Short|Byte) 方法以外,还包括处理十六进制数和八进制数输入的 decode() 方法,以及生成包装类对象的 valueOf() 方法。除此之外,构造函数 BigInteger(String) 也被修复了。

依然使用上面例子,我们试着在 JDK7+ 版本中运行一下,结果如下:

D:\Program Files\Java\jdk1.7.0_79\bin> javac Demo1.java
D:\Program Files\Java\jdk1.7.0_79\bin> java Demo1
x = 1.0
n = 1

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号