这个问题在这里已经有答案了:
显式类型转换与对float/double java使用后缀-区别(6个答案)
上个月关门了。
一位同事在公关中加了一条评论,说我们应该用1l而不是(长)1。唯一的解释是我的同事给出的是,它方便使用和阅读1l。所以我的问题是,除了可读性,1l还有其他好处吗?
我的代码
void getUserId() {
assert((long) 1, userService.getUserId())
}
userService.getUserId() returns long value i.e 1
assert() accepts two long object
2条答案
按热度按时间idfiyjo81#
一个很好的理由是使用语言提供的最简单的方式。
遵循惯例也很重要:我从java还是个婴儿的时候就开始编写它,而且我以前从未见过java
long
使用(long)
演员阵容。t2a7ltrp2#
解释
性能方面没有区别。
(long) 1
是一个常量表达式(因为1
因此,根据java语言规范(jls)的规则,将是long
已经编译好了。然而,根据我的经验,人们使用
long
文字和书写1L
为了可读性。int文字越界
当你实际使用时,你会看到一些不同
int
32位整数范围之外的值的文本。例如:习惯于编译,你必须使用
long
并添加L
去吧。字节码
考虑以下两个示例代码段:
现在看看他们的字节码:
两者编译成完全相同的代码
ldc2_w
直接加载long
放在烟囱上。所以没有从int
至long
运行时不再需要。捷豹路虎
jls在第15章中解释了这种行为。表达:
有些表达式的值可以在编译时确定。这些是常量表达式(§15.28).
其中规定:
常量表达式是表示基元类型的值或字符串的表达式,该值或字符串不会突然完成,并且只使用以下内容组成:[…]
原语类型的文字和字符串类型的文字(§3.10.1, §3.10.2, §3.10.3, §3.10.4, §3.10.5)
强制转换为基元类型和强制转换为类型字符串(§15.16)
所以代码段,因为它只包含一个原语文本和一个对原语类型的转换,被认为是一个常量表达式,因此将在编译时进行计算。