它们使用内存的方式是否存在差异?执行此操作时应考虑哪些情况?这是我的意思的一个例子。
// Calling a method directly
if(a) {
new MyClass().method1();
} else if(b) {
new MyClass().method2();
} else if(c) {
new MyClass().method3();
}
反对以下内容
MyClass mc = new MyClass();
if(a) {
mc.method1();
} else if(b) {
mc.method2();
} else if(c) {
mc.method3();
}
最佳答案
有一点细微的差别。
在第一种情况下,实例的作用域为每个条件 block ,并且一旦 block 结束就有资格进行垃圾回收 - 只会执行一个 block 。
在第二种情况下,实例的作用域为外部 block ,并且一旦外部 block 结束就可以进行垃圾回收。
在任何一种情况下,都只会创建该类的一个实例,尽管在第一个示例中考虑到缺乏安全网 else
情况,您最终可能根本不会创建任何实例(感谢@Nexevis) )。
当然,这不包括类的构造函数、初始化 block 或方法实现中可能存在的泄漏或依赖关系——在给定的上下文中这是不可能知道的。
此外,也无法得知外部 block 的作用,例如将该实例返回给调用者等。
关于java - 直接从类调用方法与创建类并调用方法有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58030303/