哪种是优化方式?

MAC*_*MAC 6 java android

可能是一个简单的问题,但我很困惑

哪些代码优化了?我应该用吗?

内部流程有什么不同?

String str = editText.getText().toString();     
str =str.trim().toLowerCase();
textView.setText(str);
Run Code Online (Sandbox Code Playgroud)
textView.setText(editText.getText().toString().trim().toLowerCase());
Run Code Online (Sandbox Code Playgroud)

Dal*_*mas 4

不要认为将所有内容放在一行中会比将语句拆分为多行更好。一般来说,Java 编译器足够聪明,可以在两种情况下生成完全相同的字节码。现代编译器做了很多微观优化。

您可以通过编译它们来检查是否存在差异,然后使用命令反编译字节码javap -c

编辑 :

我刚刚测试过,结果如下:

String str = editText.getText().toString();     
str = str.trim().toLowerCase();
textView.setText(str);
Run Code Online (Sandbox Code Playgroud)

编译为:

       0: aload_0       
       1: getfield      #7                  // Field textView:Landroid/widget/TextView;
       4: aload_0       
       5: getfield      #4                  // Field editText:Landroid/widget/EditText;
       8: invokevirtual #8                  // Method android/widget/EditText.getText:()Landroid/text/Editable;
      11: invokevirtual #9                  // Method java/lang/Object.toString:()Ljava/lang/String;
      14: invokevirtual #10                 // Method java/lang/String.trim:()Ljava/lang/String;
      17: invokevirtual #11                 // Method java/lang/String.toLowerCase:()Ljava/lang/String;
      20: invokevirtual #12                 // Method android/widget/TextView.setText:(Ljava/lang/CharSequence;)V
      23: return        
Run Code Online (Sandbox Code Playgroud)

第二个:

textView.setText(editText.getText().toString().trim().toLowerCase());
Run Code Online (Sandbox Code Playgroud)

给出以下结果:

       0: aload_0       
       1: getfield      #7                  // Field textView:Landroid/widget/TextView;
       4: aload_0       
       5: getfield      #4                  // Field editText:Landroid/widget/EditText;
       8: invokevirtual #8                  // Method android/widget/EditText.getText:()Landroid/text/Editable;
      11: invokevirtual #9                  // Method java/lang/Object.toString:()Ljava/lang/String;
      14: invokevirtual #10                 // Method java/lang/String.trim:()Ljava/lang/String;
      17: invokevirtual #11                 // Method java/lang/String.toLowerCase:()Ljava/lang/String;
      20: invokevirtual #12                 // Method android/widget/TextView.setText:(Ljava/lang/CharSequence;)V
      23: return        
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我猜对了,它们是相同的。java编译器优化了第一个示例并完全删除了无用的变量。

所以结论是你应该使用你认为更具可读性的代码。