这两个块之间会有性能差异吗?
public void doSomething(Supertype input)
{
Subtype foo = (Subtype)input;
foo.methodA();
foo.methodB();
}
与
public void doSomething(Supertype input)
{
((Subtype)input).methodA();
((Subtype)input).methodB();
}
两者之间还有其他考虑或建议吗?
好吧,在第二种情况下,编译后的代码可能包含两次强制转换-因此 ,从理论上讲,
它两次执行相同的工作。但是,智能JIT很可能会得出您对相同的值执行相同的强制转换,因此可以缓存结果。但它 是 不得不做的工作至少一次-
毕竟,它需要做出决定是否允许投成功,或抛出异常。
与以往一样,如果您关心性能,则应该测试和分析代码-但是我个人还是会使用第一种形式,只是因为它对我而言更具可读性。
问题内容: 是否需要进行显式的if(log.isDebugEnabled()){…}检查? 我的意思是,我已经看到一些帖子提到log.debug(“something”)进行隐式调用,以查看调试模式日志记录是否已启用,然后再进行日志记录。我是否缺少某些东西,或者在使用此步骤之前有中间步骤要执行? 谢谢! 与 编辑:在上面写过:http : //java.sg/whether-to-do-a-isd
问题内容: 可以在本地运行JAR文件。下一步是在另一台PC上运行它。 问题是运行JAR文件是否需要JRE,JDK或两者都需要? 问题答案: JDK包含JRE。 大多数程序仅需要JRE(Java运行时环境),但是某些程序在运行时需要编译器,在这种情况下,您需要JDK。 如果您拥有JDK,则也不需要JRE。
关于使用NewSingleThreadExecutor清理executor服务,我有一点困惑。根据它的实现,它在内部创建一个线程池,如果失败,将创建一个新的线程池。我使用singleThreadExecutor,因为我想按顺序运行在运行时创建的任务。所以我关心的是,当系统中没有更多的任务时,我需要关闭这个executor服务吗? 我读到ExecutorService内部的活动线程防止JVM关闭。由
我想同时对2个不同的服务进行Web调用。最后,我将2个对象压缩到一个流中。我正在使用,但我不确定我是否以正确的方式处理此事。似乎我仍然会被第一个调用阻止,对吗?有人能告诉我我是否在正确的轨道上吗?这是我到目前为止所拥有的:
问题内容: 谁能告诉我Java中对序列化的需求是什么,并给我一个示例场景来说明需求?(我已经知道什么是序列化,我只想了解何时使用它)。 问题答案: 通常在需要通过网络发送数据或存储在文件中时使用序列化。数据是对象,而不是文本。 现在的问题是您的网络基础结构和硬盘是可以理解位和字节但不能理解JAVA对象的硬件组件。 序列化是将Java对象的值/状态转换为字节,以便通过网络发送或保存它。 这类似于通过
问题内容: 下面的对象有一个嵌套对象 我应该如何在减速器中处理它? 我可以如上所述做吗?我只是将整个对象分配给它而不进行复制? 要么 还是应该对对象进行深层复制并将其分配给?谢谢 问题答案: 处理嵌套数据更新的“正确”方法是使用多个浅表副本,每个浅层副本一个。按照您的第一个示例,完全可以完全替换一个字段的新对象当然也可以。 有关如何正确执行不可变更新的一些信息,请参阅不可变更新模式的Redux文档