我有一个JAVA程序,它将EPOCH时间戳转换为Date,我们有两个建议的解决方案。一个只有3行代码,另一行大约10行。两者都产生正确的结果,操作次数相同,除了以下内容:
代码1:
Date d = new Date;
d = setTime(arg1*1000);
代码2:
Date d = new Date;
long timestamp = arg1 * 1000;
d = setTime(timestamp);
这里有区别吗?效率可能吗?还是内存使用?我不完全确定Code 2是否使用了更多的内存,因为它声明了一个更多的变量'timestamp'。需要输入。谢谢!
答案 0 :(得分:1)
如果timestamp变量没有在其他任何地方使用,那么两个aprroaches都是同样最优的。因为计算不是太大而不能使它不可读而且java只需要计算一次。
答案 1 :(得分:0)
没有显着的区别,只是你喜欢哪种风格。我通常会看到如果值被多次使用而使用的第二种样式,否则使用第一种样式。它归结为可读性以及以后更改代码的容易程度。
答案 2 :(得分:0)
评论和答案是正确的,无需担心这样的效率,因为JVM编译器和运行时非常擅长优化。保持代码简单为这种优化提供了最大的机会。换句话说,为智能JVM编写哑代码。
通常鼓励使用明智选择的名称创建中间变量:
因此专注于可读性,使您的代码易于人类理解。为此,我会:
Date
对象,直到计算出毫秒数为止。java.util.Date
constructor删除一行代码。L
附加到数字文字。虽然在这种特殊情况下追加可能在技术上不是必需的,因为编译器可以将int
升级为long
,L
会向读者强调我们正在努力创建{{1}而不是更常见的long
。示例代码
int
更好的是完全避免使用旧的java.util.Date/.Calendar类,因为它们非常麻烦。在Java 8及更高版本中,这些类已被新的java.time包取代。
long millisecondsSinceEpoch = ( secondsSinceEpoch * 1_000L ) ;
Date date = new Date( millisecondsSinceEpoch ) ;
答案 3 :(得分:0)
我遵守规则。如果这段代码可以抛出异常,那么我把它放在自己的行上。我讨厌解决堆栈跟踪指向具有多个Java异常的潜在源的行的问题。在你的例子中,乘法不会抛出异常,因此根据我的规则,它可以与setTime()方法调用在同一行。