【发布时间】:2011-08-07 04:13:56
【问题描述】:
所以在我的代码顶部我声明了变量
private long counter;
当我尝试给它一个非常长的数字时,它会给出一个错误,我试图这样做
counter = 1111111111111111;
那是 16 个“1”,我不断收到错误“int 类型的文字 1111111111111111 超出范围”我做错了什么?
【问题讨论】:
标签: java variables numbers int long-integer
所以在我的代码顶部我声明了变量
private long counter;
当我尝试给它一个非常长的数字时,它会给出一个错误,我试图这样做
counter = 1111111111111111;
那是 16 个“1”,我不断收到错误“int 类型的文字 1111111111111111 超出范围”我做错了什么?
【问题讨论】:
标签: java variables numbers int long-integer
试试这样:
counter = 1111111111111111l;
请注意,最后一个字符是字母“L”(当然是小写),而不是数字一。这是一个更清晰的例子:
counter = 2222222222222222L;
正如其他人指出的那样,大写的“L”也可以使用并且更加清晰。 Java 中的所有整数文字都被解释为ints,除非您在它们后面加上“L”(或“l”)来告诉编译器将其解释为long。
文字浮点数也会发生类似的情况,默认情况下它们被解释为doubles,除非你在它们后面加上'f'来告诉编译器将其解释为float。如:
double num1 = 1.0; //1.0 is treated as a literal double
float num2 = 1.0; //1.0 is still treated as a literal double; the compiler may complain about loss of precision
float num3 = 1.0f; //1.0 is treated as a float, and the compiler is happy
【讨论】:
L ;)
Long.valueOf,例如:long testInt = Long.valueOf(inputBox.getText().toString());. Otherwise your input value will either be truncated to Integer.MAX_VALUE` 或(更有可能) 将无法完全解析。
java 编译器默认将任何数字读取为整数。 11111111111 显然超出了整数的范围。输入counter=11111111111L; 让编译器正确读取值。
【讨论】:
问题是数字文字默认为ints。要使数字文字变长,您必须使用字母字符 l(小写 L)来完成它。所以:
long counter = 1111111111111111l;
在 C# 中,您也可以使用大写 L。我不确定 Java。
【讨论】:
L 出于视觉原因更可取。