“ s:”在这里是什么意思?

时间:2019-10-12 12:37:26

标签: java

我正在尝试使用parseDouble()将字符串值解析为双精度类型。解析双精度型接受我使用getText()传递给它的字符串。但这是行不通的。然后,我用双引号将其连接起来。现在正在工作。但是我在这里感到困惑。尽管它接受一个字符串,而getText()当然却得到一个字符串,但为什么它没有连接就不能工作。编写该语句后,编译器添加了“ s:”。我也想知道这是什么意思。我正在使用Android Studio 3.5.0.0

我尝试过:

val1=Double.parseDouble(ioTxt.getText());

但这不起作用。

正确的说法是:

val1 = Double.parseDouble(s: ioTxt.getText()+"");
ioTxt是一个TextView。 Val1是double类型的变量。 s:是编译器添加的内容,不是上面编写的语法和语句的一部分

如果将toString()写入而不是连接,则以上语句也可以很好地工作。是:

val1 = Double.parseDouble(ioTxt.getText().toString());

但是我不明白为什么它需要toString()才能正常工作。

我希望在不使用引号或toString()将其串联的情况下使用它。

3 个答案:

答案 0 :(得分:2)

  

但是我不明白为什么它需要toString()才能正常工作。

Double.parseDouble() takes an argument of type String

getText()方法显然返回了String以外的内容,因此您需要进行转换。

添加空字符串是强制进行String转换的怪诞方式(带有一个+参数的String运算符隐含地在另一个参数上调用toString())。建议使用明确的toString()通话。

's:'只是parseDouble()使用的参数名称,由IDE显示为提示。它实际上并不是在修改您的源代码。

答案 1 :(得分:0)

android.widget.TextView.getText()方法被声明为返回CharSequence而不是String。 (请参见javadoc。)

CharSequence接口是String声明的接口之一。 (请参见javadoc。)

Double.parseDouble带有一个String参数。 (请参见javadoc。)

因此,其中存在类型不匹配:

val1 = Double.parseDouble(ioTxt.getText());  // expects String
                                             // provided CharSequence

但这可行:

val1 = Double.parseDouble(ioTxt.getText().toString());

因为toString()正在将CharSequence转换为String。这是进行转换的另一种方式:

val1 = Double.parseDouble(ioTxt.getText() + "");

但是请注意,这不是有效的Java代码:

val1 = Double.parseDouble(s: ioTxt.getText()+"");

您很有可能误解了您的IDE所说的内容。

答案 2 :(得分:-1)

parseDouble接受String作为参数。

在尝试传递双精度字符而不是字符串时,您遇到错误。

对于第二个问题, 编译器永远不会在源文件中添加任何内容。您看到的“ s:”是您正在使用的IDE的一种方式,用于在调用方法时显示您正在设置的参数。