Double.parseDouble() 和 Double.valueOf()的区别

在一次代码中写了一句Double.valueOf(score) //score是一个String类型的数值时,IDEA提示我最好使用Double.parseDouble() ,那么Double.parseDouble()Double.valueOf()有什么区别呢?


在网上查了一下,介绍的并不全面而且可能已经过时了,所以直接在代码中点开官方文档说明(java 1.8版本)

Double.valueOf()

  • 有两个重载方法,分别是: Double valueOf(String)、 Double valueOf(double),他们的说明分别是(机翻):
    • valueOf(String):返回一个 Double 对象,其中包含参数字符串 s 所代表的 double 值。如果 s 为空,则会产生 NullPointerException 异常。s 中的前导和尾部空白字符将被忽略。空白字符会像使用 String.trim() 方法一样被删除;也就是说,ASCII 空格和控制字符都会被删除。

      同时该方法在无法解析字符串时会抛出NumberFormatException异常。

    • valueOf(double d):返回代表指定 double 值的 Double 实例。如果不需要新的Double 实例,一般应优先使用此方法,而不是构造函数 Double(double),因为此方法通过缓存经常请求的值,可能会大大提高空间和时间性能。

Double.parseDouble()

  • Double.parseDouble()只能接收字符串类型的参数,返回值是基本类型double,同样会抛出NumberFormatException异常:返回一个初始化为指定字符串所代表值的新 double,该值由类 DoublevalueOf 方法执行。
    • public static double parseDouble(String s) throws NumberFormatException
    • 参数:s - 要解析的字符串。
    • 返回值:字符串参数代表的 double 值。
    • 抛出:
      • NullPointerException - 如果字符串为空
      • NumberFormatException - 如果字符串不包含可解析的 double。
@Override public void actionPerformed(ActionEvent e) {//触发此动作时执行 for (int i = 0; i < 10; i++) { if (e.getSource() == numberButtons[i]) {//返回最初发生 Event 的对象,那个对象被触发,就返回这个对象 textField.setText(textField.getText().concat(String.valueOf(i))); } } if (e.getSource() == decButton) { textField.setText(textField.getText().concat(".")); } if (e.getSource() == addButton) { num1 = Double.parseDouble(textField.getText()); operator = '+'; textField.setText(""); } if (e.getSource() == subButton) { num1 = Double.parseDouble(textField.getText()); operator = '-'; textField.setText(""); } if (e.getSource() == mulButton) { num1 = Double.parseDouble(textField.getText()); operator = '*'; textField.setText(""); } if (e.getSource() == divButton) { num1 = Double.parseDouble(textField.getText()); operator = '/'; textField.setText(""); } if (e.getSource() == equButton) { num2 = Double.parseDouble(textField.getText()); switch (operator) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': result = num1 / num2; break; } textField.setText(String.valueOf(result)); num1 = result; } if (e.getSource() == clrButton) { textField.setText(""); } if (e.getSource() == delButton) { String string = textField.getText(); textField.setText(""); for (int i = 0; i < string.length() - 1; i++) { textField.setText(textField.getText() + string.charAt(i)); } } } }请注释出每一步在做什么
06-02
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值