为什么科特林的串插串联Java中的字符串?

user218046:

所以,基本上我不知道怎么会科特林的串插一下在Java中(反编译的字节码)。起初,我想过它会用StringBuffer(或StringBuilder的),或的String.format(),但似乎它串联。难道真的最优这样做,怎么样的字符串池?

这里是我的科特林代码:

fun main(args: Array<String>) {

    val age : Int = 24
    var mySuperString : String = "Dato is ${age} years old!"

    println(mySuperString)
}

这里是我已经反编译的形式* .class文件的Java代码:

import java.io.PrintStream;
import kotlin.Metadata;
import kotlin.jvm.internal.Intrinsics;
import org.jetbrains.annotations.NotNull;

@Metadata(mv={1, 1, 6}, bv={1, 0, 1}, k=2, d1={"\000\024\n\000\n\002\020\002\n\000\n\002\020\021\n\002\020\016\n\002\b\002\032\031\020\000\032\0020\0012\f\020\002\032\b\022\004\022\0020\0040\003�\006\002\020\005�\006\006"}, d2={"main", "", "args", "", "", "([Ljava/lang/String;)V", "KotlinProject"})
public final class MainKt
{
  public static final void main(@NotNull String[] args)
  {
    Intrinsics.checkParameterIsNotNull(args, "args");int age = 24;
    String mySuperString = "Dato is " + age + " years old!";

    System.out.println(mySuperString);
  }
}

即使字符串是巨大的和值是很多,它仍然使用加号!

这是最快的方式或他们为什么要这么做?

guenhter:

答案很简单:它不

我猜你的反编译器是相当复杂的,也翻译了StringBuilder-append操作历久弥新+concationation。

所以,如果你看看字节码,你看到StringBuilder被使用。

public main(java.lang.String[] arg0) { //([Ljava/lang/String;)V
     <localVar:index=3 , name=mySuperString , desc=Ljava/lang/String;, sig=null, start=L1, end=L2>
     <localVar:index=2 , name=age , desc=I, sig=null, start=L3, end=L2>
     <localVar:index=0 , name=this , desc=Lorg/guenhter/springboot/kt/RandomReceivingController;, sig=null, start=L4, end=L2>
     <localVar:index=1 , name=args , desc=[Ljava/lang/String;, sig=null, start=L4, end=L2>

     L4 {
         aload1
         ldc "args" (java.lang.String)
         invokestatic kotlin/jvm/internal/Intrinsics checkParameterIsNotNull((Ljava/lang/Object;Ljava/lang/String;)V);
     }
     L5 {
         bipush 24
         istore2
     }
     L3 {
         new java/lang/StringBuilder
         dup
         invokespecial java/lang/StringBuilder <init>(()V);
         ldc "Dato is " (java.lang.String)
         invokevirtual java/lang/StringBuilder append((Ljava/lang/String;)Ljava/lang/StringBuilder;);
         iload2
         invokevirtual java/lang/StringBuilder append((I)Ljava/lang/StringBuilder;);
         ldc " years old!" (java.lang.String)
         invokevirtual java/lang/StringBuilder append((Ljava/lang/String;)Ljava/lang/StringBuilder;);
         invokevirtual java/lang/StringBuilder toString(()Ljava/lang/String;);
         astore3
     }
     L1 {
         getstatic java/lang/System.out:java.io.PrintStream
         aload3
         invokevirtual java/io/PrintStream println((Ljava/lang/Object;)V);
     }
     L6 {
         return
     }
     L2 {
     }
 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么两种类型在科特林ReadFile和字符串之间有什么不同?

为什么科特林String.split用正则表达式的字符串不一样的Java?

科特林和Java字符串之间的区别与分裂正则表达式

科特林。从字节数组中获取字符串部分

在字符串的不同索引中查找匹配項。科特林

为什么迭代器中的字符串是串联的?

如何名单<String>的转换为字符串前缀和后缀在科特林

编码字符串转换为UTF-8科特林

如果地图包含子字符串,则为高。科特林

为什么在堆中创建字符串对象和字符串文字的串联?

为什么我必须投在科特林而不是Java?

Java中字符串常量的串联

如何检查该字符串不等于一个字符串然后它会工作,否则没有?在科特林

为什么此函数返回''而不是串联字符串

为什么单引号不适用于 ruby 中的字符串插值

为什么在RestController中,Flux.fromIterable()作为一个串联字符串返回?

将串联字符串分配给python中的变量时,为什么这么慢?

一种从字符串中删除特定字符的方法?(科特琳)

具有串联匹配的字符串插值

为什么在Java中字符串以“”开头?

在Java中串联空字符串的正确方法是什么?

Java 14或15中的字符串插值

Java中的字符串和整数串联

什么是“ ??” 在科特林的卑鄙

为什么是调用put()未在科特林编译时,用Java编译类似的代码

为什么的AtomicInteger是抽象的科特林?(它在Java的罚款)

我怎么可能将一个字符串分解成科特林一个数组?

为什么科特林接收到这样的UndeclaredThrowableException中,而不是一个ParseException?

科特林:通过在科特林数据类设置在Java类的私人布尔。为什么我不能够做到这一点?