使用临时变量是否存在性能问题?

das*_*asd 0 java performance

我有一个关于在java中创建新对象的问题.

让我们说我有方法叫: foo(String[] a)

我想传递给foo一个新String[]的只有一个用途的东西更好

表现1或2

1.

String[] a = new String[]{"a"};

foo(a);
Run Code Online (Sandbox Code Playgroud)

2.

foo(new String[]{"a"});
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

ars*_*jii 8

你可以检查字节码:

1.

  public static void main(java.lang.String[]);
    Code:
       0: iconst_0      
       1: anewarray     #2                  // class java/lang/String
       4: astore_1      
       5: aload_1       
       6: invokestatic  #3                  // Method foo:([Ljava/lang/String;)V
       9: return 
Run Code Online (Sandbox Code Playgroud)

2.

  public static void main(java.lang.String[]);
    Code:
       0: iconst_0      
       1: anewarray     #2                  // class java/lang/String
       4: invokestatic  #3                  // Method foo:([Ljava/lang/String;)V
       7: return  
Run Code Online (Sandbox Code Playgroud)

唯一的区别是在(2)中,没有存储引用(astore_1),也没有需要加载(aload_1).这几乎肯定不会导致性能差异(你不应该担心这种微小的优化),但如果你不打算a在程序中再次引用(如你在前面提到的那样),你也可以使用选项(2).您的评论)并且没有可读性侵权.

我认为可读性组件非常重要:我宁愿创建一个变量来存储数组(即使我永远不会多次引用这个变量),而不是一条超长,不可读的行.当然,在您的示例中,可读性没有问题,但是在出现更复杂的情况时需要考虑这个问题.