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

我正在尝试使用 parseDouble() 将字符串值解析为双精度类型。Parse double 接受我使用 getText() 传递给它的字符串。但这不起作用。然后我用双引号将它连接起来。现在正在工作。但我在这里有一个困惑。为什么它在没有连接的情况下无法工作,尽管它接受一个字符串,并且 getText() 当然是获取一个字符串。编写该语句后,编译器添加了“s:”。我也想知道这在这里意味着什么。我使用的是Android Studio 3.5.0.0

我努力了:

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

但这行不通。

正确的说法是:

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

ioTxt 是一个文本视图。Val1 是 double 类型的变量。s: 是编译器添加的东西,它不是上面写的语法和语句的一部分

如果写 toString() 而不是串联,上面的语句也能很好地工作。这是:

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

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

我希望在不将其与引号或 toString() 连接的情况下进行工作。


哆啦的时光机
浏览 122回答 3
3回答

白猪掌柜的

但我再次不明白为什么它需要 toString() 才能正常工作。Double.parseDouble()接受类型为 的参数String。该getText()方法显然返回除 a 之外的其他内容String,因此您需要进行转换。附加空字符串是强制String转换的一种巧妙方法(+具有一个String参数的运算符隐式调用toString()另一个参数)。更喜欢显式toString()调用。's:' 只是 所使用的参数名称parseDouble(),并由 IDE 作为提示显示。它实际上并没有修改您的源代码。

互换的青春

该android.widget.TextView.getText()方法被声明为返回 aCharSequence而不是 a 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为 a String。这是进行转换的另一种方式:val1 = Double.parseDouble(ioTxt.getText() + "");但请注意,这不是有效的 Java 代码:val1 = Double.parseDouble(s: ioTxt.getText()+"");您很可能误解了您的 IDE 所说的内容。

HUH函数

parseDouble接受 String 作为参数。当您尝试传递双精度值而不是字符串时,会出现错误。对于第二个问题,编译器永远不会向源文件中添加任何内容。您看到的“s:”是您正在使用的 IDE 的一种方式,用于显示您在调用方法时设置的参数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java