在java中正确声明长类型?

时间:2014-06-29 20:26:55

标签: java types long-integer

我正在阅读java中书籍数据结构和算法中的主题基本类型。 我引用了一些可能有用的主题文本:

"声明具有这些类型之一的变量只存储该类型的值, 而不是对某个对象的引用。整数常量,如14或195,属于类型 int,除非马上跟着' L'或者' l',在这种情况下,它们是long类型。 浮点常数,如3.1415或2.158e5,是double类型,除非 紧随其后的是F' F'或者' f',在这种情况下,它们是float类型。我们表明 Code Fragment 1.2中的一个简单类,它将许多基类型定义为local 主要方法的变量。" - 形成这本书

然后在示例代码中:

long l = 890L;

我的问题是,如果l(变量)的类型已经声明为long,为什么我需要将L放在最后?

例如,如果我这样做:

long l = 890;

它仍然可以工作,所以为什么在示例代码中写的长l = 890L;

4 个答案:

答案 0 :(得分:2)

这是widening implicit conversion。 Java可以清楚地告诉您正在尝试将int值890分配给长l。这是成功的(没有演员表),因为它可以在没有任何数据丢失的情况下完成。

我无法告诉您为什么该示例使用890l。我可以假设这样做是明确的,但这只是猜测。

答案 1 :(得分:2)

变量的类型和文字的类型之间存在区别。

在这种情况下:

long l = 890L;

你有一个long类型的变量和一个long类型的文字。当然这很有效。

在这种情况下:

long l = 890;

你有一个long类型的变量和一个int类型的文字。整数会自动提升为一个整数(因为它适合),这也适用。它与此相同:

int i = 890;
long l = i;

请注意,您无法执行此操作:

int i = 890L;

这是因为虽然在这种情况下890足够小以适合整数,但没有将longs自动转换为整数的一般规则,因为情况并非总是如此。

请注意,您也不能这样做:

long l = 3000000000;

这是因为你试图声明一个int类型的文字,但是这个数字太大而不适合int。

答案 2 :(得分:1)

我不确切地知道为什么它是这样设计的,但是如果你有一个没有L的整数,那么假设它是一个int。尝试在没有L的情况下定义一个大数字(在int范围之外),编译器会告诉你那里有错误。

同样适用于不是整数的数字:如果你想要一个浮点数,你必须添加一个F后缀(例如3.1415F),否则假设它是一个双精度数。

答案 3 :(得分:0)

  

为什么在示例代码中将其写为l = 890L;

更明确的是作者期望值很长。

就我个人而言,我更喜欢简洁并留给开发人员来计算价值,如果他们关心的话会很长,而且很可能他们甚至都不会考虑它。