首页 > 其他分享 >Kotlin中的字符串模板

Kotlin中的字符串模板

时间:2023-06-01 12:33:06浏览次数:37  
标签:lang Ljava name Kotlin StringBuilder 字符串 模板

字符串模板的使用

在Kotlin中可以直接在字符串字面值中引用变量,例如:

val name = "william"
val  str = "my name is ${name}"
println(str)

并且Kotlin官方文档建议使用字符串模板来替代字符串连接符的使用,原因在于我们知道String类是immutable的,字符串连接符的实现原理是每次都会产生一个新的String对象来保存连接后的新字符串,所以会十分耗费内存。

那么字符串模板的实现原理是什么呢?为什么会比使用字符串连接符要高效?我们写一下测试代码反编译看看字节码就清楚了

字符串模板的原理

测试代码:

    fun test() {
       val name = "william"
       val  str = "my name is ${name}"
       println(str)
   }

反编译之后的部分代码:

public final test()V
  L0
   LINENUMBER 7 L0
   LDC "william"
   ASTORE 1
  L1
   LINENUMBER 8 L1
   NEW java/lang/StringBuilder
   DUP
   INVOKESPECIAL java/lang/StringBuilder.<init> ()V
   LDC "my name is "
   INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
   ALOAD 1
   INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
   INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String;
   ASTORE 2
   ...

可以看到字符串模板在编译的时候会转成使用StringBuilder.append方法来实现字符串的拼接。

标签:lang,Ljava,name,Kotlin,StringBuilder,字符串,模板
From: https://www.cnblogs.com/jqctop1/p/17428993.html

相关文章

  • 双指针算法模板和一些题目
    什么是同向双指针?什么是相向双指针?双指针的鼻祖题——两数之和TwoSum链表上的快慢指针算法快速排序&归并排序 同向双指针•相向双指针•几乎所有TwoSum变种•Partition•QuickSelect•分成两个部分•分成三个部分•一些你没听过的(但是面试会考的)......
  • Kotlin的空安全
    Kotlin中的可空类型在Kotlin中可以通过在类型后加一个?来表示该类型是可空类型,例如:varname:String?varid:String上述代码表示name是一个可空的String类型变量,而id是一个不可为空的String类型变量。如果在代码中试图将一个可空的值赋值给id,则会导致如下的编译错误:Type......
  • C++模板从入门到精通:初阶篇
    一、泛型编程1.1什么是泛型编程?泛型编程是一种编程风格,其中算法以尽可能抽象的方式编写,而不依赖于将在其上执行这些算法的数据形式1。泛型编程可以提高代码的重用性、可维护性和类型安全性。泛型编程的基础是模板,模板是创建泛型类或函数的蓝图或公式。平常写的函数与泛型编程的模板......
  • 模板方法模式
    一、定义定义一个操作中的算法的框架,而将一些步骤延迟到了子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些步骤。二、实例来一个经典的脑筋急转弯。把一个大象装进冰箱要几个步骤?然后把一个长颈鹿装进冰箱要几个步骤?三、UML类图  四、钩子函数钩子......
  • vue+docxtemplater,填充word模板
    安装依赖yarnadddocxtemplateryarnaddpizzipyarnaddjszip-utilsyarnaddfile-saver//模板解析插件(支持list循环直接使用$index,使用if判断语法)yarnaddangular-expressionsyarnaddlodash页面测试代码<template> <div> <button@click="bt......
  • python字符串操作
    python字符串操作字符串定义可用单引号、双引号、三引号来定义字符串#eg:var1='HelloWorld!'var1="HelloWorld!"var1="""HelloWorld!"""字符串相关的一些操作1.input()name=input("请输入你的名字:")#输入张三print(name)#张三print(type(n......
  • 【随手记录】关于Java字符串长度
    在java当中,在运行期间,字符串的长度是有最大限制的:21亿,也就是4GB;在编译期间,字符串的长度最大为:65534。字符串的内容是由一个字符数组char[]来存储的,由于数组的长度及索引是整数,Integer的最大范围是2^31-1,所以数组的最大长度可以使【0~2^31-1】通过计算是大概4GB=(2*2^31-......
  • 比较两个字符串最长有多少个连续字符相等
    比较两个字符串最长有多少个连续字符相等#include<stdio.h>#include<string.h>intcompare(char*a,char*b){inti,j;intlen=0;intmax=0;inttemp=0;for(i=0;i<strlen(a);i=temp,i++){temp=i;for(j=0,len=0;j<strle......
  • 统计一个字符串中不重复的字符串的最大长度
    统计一个字符串中不重复的字符串的最大长度#include<stdio.h>#include<math.h>#include<string.h>#include<unistd.h>intget_maxlen(char*s){inta[128]={0};intb=0,left=0;intmax=0;while(b<strlen(s)){if(a[s[b]]&......
  • 剑指offer 58 2 左旋转字符串
    将左边n个字符转移到字符串结尾,比如s=abcdefg,n=2;输出cdefgab。看起来不难,但是解法还是挺多的,重要的是复杂度。还是先写下思路,常规的思路(暴力):就是定义两个字符串str1,str2,n之后的字符全部拷贝进入str2,然后再把k和k之前字符的拷贝进入str1,返回str2+str1。缺点嘛,空间复杂度高,时间......