通过初始化声明变量vs.直接使用值

  • 本文关键字:vs 初始化 声明 变量 java
  • 更新时间 :
  • 英文 :


我有一个JAVA程序,它将EPOCH时间戳转换为日期,我们有两个建议的解决方案。一个只有3行代码,另一个大约10行。两者都产生正确的结果,操作次数相同,除了以下内容:

代码1:

 Date d = new Date;
 d = setTime(arg1*1000);
代码2:

 Date d = new Date;
 long timestamp = arg1 * 1000;
 d = setTime(timestamp);

这里有区别吗?可能是效率?或者内存使用?我不完全确定代码2是否使用了更多的内存,因为它声明了一个变量"时间戳"。输入需要的。谢谢!

如果时间戳变量没有在其他任何地方使用,那么这两种方法同样是最优的。由于计算量不是太大而无法读取,java只需要计算一次。

JVM Optimization

注释和答案都是正确的,没有必要担心这样的效率,因为JVM编译器和运行时非常擅长优化。保持代码简单为这种优化提供了最大的机会。换句话说,为智能JVM编写愚蠢的代码。

通常鼓励使用明智的名称创建中间变量:

  • 使您的代码更加自文档化。
  • 现代jvm擅长于有效地处理和处置任何这样的短寿命对象。编译器可能已经优化掉了额外的变量,并将值内联了。
  • 最重要的是,调试是如此容易。在跟踪完整的代码时,您可以看到每个增量更改/操作的发生。命名的变量创建了一个值目录,供您在调试器工具中查看。
<标题> 可读的代码

所以关注可读性,让你的代码易于人们理解。为此,我将:

  • 改变语句的顺序。通常最好在使用数据之前准备好数据,所以在计算毫秒数之前不要开始实例化Date对象。
  • 利用java.util.Date构造函数删除一行代码。
  • 将变量名更改为自记录。
  • 在数字文本中插入下划线以使数字更易于阅读。
  • 将大写L附加到数字字面值。由于编译器可以将int增大到long,所以在这种特殊情况下,附加可能不是技术上必要的,但L向读者强调,我们正在努力创建long而不是更常见的int
示例代码

long millisecondsSinceEpoch = ( secondsSinceEpoch * 1_000L ) ;
Date date = new Date( millisecondsSinceEpoch ) ;
<标题> java.time h1> 好是完全避免旧的java.util.Date/。日历类是出了名的麻烦。在Java 8及以后的版本中,这些类已经被新的Java所取代。时间包。
Instant instant = Instant.ofEpochSecond( secondsSinceEpoch ) ;

没有显著的差异,只是你喜欢哪种风格。如果值不止一次使用,我通常使用第二种样式,否则使用第一种样式。这取决于可读性和以后修改代码的容易程度。

我有自己的原则。如果这段代码可以抛出异常,那么我就把它放在单独的一行中。我讨厌对这样的问题进行故障排除:堆栈跟踪指向具有多个潜在Java异常源的行。在您的示例中,乘法不会抛出异常,因此根据我的规则,可以与setTime()方法调用放在同一行。

最新更新