[英]I am not able to pass Long as run time argument in Java program
我无法在Java程序中将Long
作为运行时参数传递给我,我尝试了1L
, 1l
, 1.0L
, 1.0L
,但是给出了数字格式异常。 虽然它可以正常工作1
但是按照Java prog语言long
应该用L
标记后缀。 如果我将此程序运行为float
并通过1F
则工作正常。
public class Apple {
public static void main(String[] args) {
System.out.println(Long.parseLong(args[0]));
/*System.out.println(Float.parseFloat(args[0]));
}
}
表达式Long.parseLong(s)
对其字符串参数s
调用方法parseLong
。 该字符串最好看起来像"1"
或"123"
并且末尾没有 L
你感到困惑的事实,Java源代码内 ,冗长的文字标有 L
。 在Java代码中,我们可以编写:
Long x = 1L;
因为1L
是Java源代码的一部分; 它是一个长整数。 但是,仅仅因为我们被允许写1L
来表示Java源代码中的数字, 并不意味着Long.parseLong
将理解字符串 "1L"
。 我可以理解为什么您可能会这么认为,但这不是Long.parseLong
工作方式。 它需要一个普通的旧数字序列,没有L
就是那样子。
在javadoc中针对Long.parseLong
进行了Long.parseLong
:
将字符串参数解析为带符号的十进制
long
。 字符串中的字符必须全部为十进制数字,但第一个字符可以是ASCII减号'-'(\\ u002D')表示负值,也可以是ASCII加号'+'('\\ u002B')来表示。表示正值。 返回最终的long
值,就像参数和基数10
作为parseLong(java.lang.String, int)
方法的参数一样。请注意,字符
L
('\\ u004C')和l
('\\ u006C')都不允许出现在字符串的末尾作为类型指示符,这在Java编程语言源代码中是允许的。
这与Float
相反,在Javadoc中, Float
指示允许使用后缀。 Float.parseFloat
:
返回一个新的
float
初始化为指定的String
表示的值,由Float
类的valueOf
方法执行。
Float.valueOf
(节选):
...其中Sign , FloatingPointLiteral , HexNumeral , HexDigits , SignedInteger和FloatTypeSuffix在Java™语言规范的词法结构部分中定义,但数字之间不能使用下划线。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.