我无法在Java程序中传递长时间的运行时参数

我无法在Java程序中传递长时间的运行时参数,java,arguments,long-integer,Java,Arguments,Long Integer,我无法在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]));

我无法在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
的工作方式。它需要一个普通的旧数字序列,no
L
。这就是它的方式。

在javadoc中声明:

将字符串参数解析为带符号的十进制
long
。人物 字符串中的所有字符都必须是十进制数字,但第一个字符除外 字符可以是ASCII减号“-”(\u002D'),表示 负值或ASCII加号“+”(“\u002B”)表示 正值。返回得到的
long
值,与 参数和基数
10
作为
parseLong(java.lang.String,int)
method

请注意,字符
L
('\u004C')和
L
('\u006C')均不可用 允许作为类型指示符出现在字符串末尾,如下所示 将被允许在Java编程语言的源代码

这与
Float
相反,后者在javadoc中指出允许使用后缀:

返回一个新的
浮点值
初始化为 指定的
String
,由类的
valueOf
方法执行
Float

(节选):

。。。其中,符号、浮点文字、十六进制数字、十六进制数字、, SignedInteger和FloatTypeSuffix在Java的词汇结构部分中定义™ 语言规范,除了 数字之间不接受下划线


那么,当我通过1F时,为什么它对float有效呢?原因在于Dragan的答案,它比我的答案更完整,因为它引用了来源,应该被接受。