Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对java数据类型和文本有点困惑_Java - Fatal编程技术网

对java数据类型和文本有点困惑

对java数据类型和文本有点困惑,java,Java,所以我理解什么是数据类型和文字,但我对一件事感到困惑。 当数据类型很长时,为什么必须输入L?为什么我不用这么做呢 // Why does a not work but b does? Both are longs? long a = 9223372036854775807; long b = 9223372036854775807L; 在报告中明确指出: “如果整型文字以字母L或L结尾,则为long类型;否则为int类型。建议使用大写字母L,因为小写字母L很难与数字1区分。” 你的第二个问

所以我理解什么是数据类型和文字,但我对一件事感到困惑。 当数据类型很长时,为什么必须输入L?为什么我不用这么做呢

// Why does a not work but b does? Both are longs? 

long a = 9223372036854775807;
long b = 9223372036854775807L;
在报告中明确指出:

“如果整型文字以字母L或L结尾,则为long类型;否则为int类型。建议使用大写字母L,因为小写字母L很难与数字1区分。”

你的第二个问题也在这里得到了回答:

“整数类型byte、short、int和long的值可以从int文本中创建”

中明确说明:

“如果整型文字以字母L或L结尾,则为long类型;否则为int类型。建议使用大写字母L,因为小写字母L很难与数字1区分。”

你的第二个问题也在这里得到了回答:


“整数类型byte、short、int和long的值可以从int文本中创建”

如果未设置L,编译器将尝试将文本解析为int,如下面的示例场景所示

long接受介于:-9223372036854到+9223372036854775807之间的值。现在我已经创建了一个名为testLong的长变量,尽管当我插入9223372036854775807作为值时,我得到一个错误,声明:

“int 9223372036854775807的文字超出范围。”


解决方案是在末尾添加大写字母L:

如果您没有设置L,编译器将尝试将文本解析为int,如下面的示例场景所示

long接受介于:-9223372036854到+9223372036854775807之间的值。现在我已经创建了一个名为testLong的长变量,尽管当我插入9223372036854775807作为值时,我得到一个错误,声明:

“int 9223372036854775807的文字超出范围。”


解决方案是在末尾加一个大写字母L:

在Java中只定义了两种整数文本类型:
int
long
。后者与前者的区别在于后缀
L
L
。(字符文字也是整数类型(例如,可以分配给
int
),但Java语言规范(JLS)将其与整数文字分开处理。)

请记住(除了推断泛型类型参数外),赋值左侧的类型对右侧的求值没有影响。因此,如果您为
long
类型的变量赋值,表达式将首先求值,然后结果才会转换为
long
(如果可能和必要)

声明

long a = 10;
这是完全正确的。将对仅由整数文本
10
组成的右侧表达式求值,然后将其升级为
long
,然后将其分配给变量
a
。除非您想分配一个太大而无法在
int
中表示的值,否则这种方法很有效。在这种情况下,您还必须将
类型的文本设置为long

这个“问题”不仅限于文字。考虑下面的语句,该语句频繁地咬新用户:

long a = Integer.MAX_VALUE + 1;
右侧的表达式使用
int
算术进行计算,因此溢出。只有这样,结果才是正确的(−2147483648)被提升为
long
并分配给
a
,但现在已经太晚了。如果
1
被写成
1L
,溢出就不会发生

为什么我不必为
short
byte
这样做

首先,请注意,
int
类型的文本可以保存您可能分配给
short
byte
的任何值,因此上述问题不会发生。此外,您“不必”使用
short
byte
文本,但您不能,因为这些文本没有定义。这一直困扰着我,因为这意味着如果我们想用一个文本参数调用一个函数,我们通常必须强制转换到
字节


如果您喜欢阅读standardese,您可以查阅有关的章节。

Java中只定义了两种整数文本类型:
int
long
。后者与前者的区别在于后缀
L
L
。(字符文字也是整数类型(例如,可以分配给
int
),但Java语言规范(JLS)将其与整数文字分开处理。)

请记住(除了推断泛型类型参数外),赋值左侧的类型对右侧的求值没有影响。因此,如果您为
long
类型的变量赋值,表达式将首先求值,然后结果才会转换为
long
(如果可能和必要)

声明

long a = 10;
这是完全正确的。将对仅由整数文本
10
组成的右侧表达式求值,然后将其升级为
long
,然后将其分配给变量
a
。除非您想分配一个太大而无法在
int
中表示的值,否则这种方法很有效。在这种情况下,您还必须将
类型的文本设置为long

这个“问题”不仅限于文字。考虑下面的语句,该语句频繁地咬新用户:

long a = Integer.MAX_VALUE + 1;
右侧的表达式使用
int
算术进行计算,因此溢出。只有这样,结果才是正确的(−2147483648)被提升为
long
并分配给
a
,但现在已经太晚了。如果
1
被写为
1L
,溢出就不会发生