Java:使用新Object时两种方式不同

hqt*_*hqt 1 java object

例如,您想要反转一个字符串,有两种方法:

第一:

String a = "StackOverFlow";
a = new StringBuffer(a).reverse().toString();
Run Code Online (Sandbox Code Playgroud)

第二是:

String a = "StackOverFlow";
StringBuffer b = new StringBuffer(a);
a = b.reverse().toString();
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我有两个问题:

1)在第一个代码中,java StringBuffer之前是否在内存中创建了一个"虚拟对象" reverse并更改为String.

2)在上面的代码中,首先会比第二代更优化,因为它使GC更有效地工作?(这是我想问的一个主要问题)

Jon*_*eet 5

两个片段将创建相同数量的对象.唯一的区别是局部变量的数量.这可能甚至不会改变堆栈上的数量等等 - 只是在第二个版本的情况下,其中一个堆栈插槽(b)的名称.

区分对象变量非常重要.编写最易读的代码也很重要,而不是尝试微优化.一旦你有了明确的工作代码,你应该测量它是否足够快以满足你的要求.如果不是,您应该对其进行分析以找出最有效地进行更改的位置,并优化该部分,然后重新测量等.