首页 > 其他分享 >字符串连接原理

字符串连接原理

时间:2023-09-09 11:58:26浏览次数:32  
标签:main String StringBuilder 连接 字符串 原理 Main public

title: 字符串连接原理
index_img: img/2.svg
tags:
  - Java SE
  - 字符串
categories:
  - Java SE
hide: false
excerpt: 字符串拼接方式、效率、对象

使用+运算符

无变量参与

  • 运行前就直接拼接为一个字符串
public class Main {
    public static void main(String[] args) {
        String s = "Hello " + "World"+"!";
    }
}

在编译后实际上会变成:

public class Main {
    public Main() {
    }

    public static void main(String[] var0) {
        String var1 = "Hello World!";
    }
}

jdk8之前(有变量参与)

public class Main {
    public static void main(String[] args) {
        String s1 = "Hello";
        String s2 =s1+"world";
        String s3 =s2+"!";
    }
}

每次+堆中都会创建StringBuilderString对象,字符串常量池中会添加HelloWorld!,效率低且浪费空间。(StringBuilder高效率是针对一个StringBuilder而言)

//等效代码
public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        String s1 = "Hello";
        sb.append(s1);
        String s2 = sb.append("world").toString();
        String s3 = sb.append("!").toString();
    }
}

jdk8之后(有变量参与)

public class Main {
    public static void main(String[] args) {
        String s1 = "a";
        String s2 = "b";
        String s3 = "c";
        String s4 = s1 + s2 + s3;
    }
}
  • jdk8之前堆中会产生4个对象,字符串常量池中会有3个对象

  • jdk8之后堆中会产生1个对象,字符串常量池中会有3个对象

jdk8之后,每+都会产生新的预估数组和一个String对象,依旧效率低。

注意

先判断是否有变量参与,再判断是否分析常量池(会复用)和堆。

StringBuilder

StringBuilderStringBuffer 是专门用于处理字符串连接的类。StringBuffer 是线程安全的,而 StringBuilder 不是,因此在不涉及多线程的情况下,一般推荐使用 StringBuilder

public class Main {
    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("a");
        stringBuilder.append("b");
        stringBuilder.append("c");
        System.out.println(stringBuilder); // 还是StringBuilder对象
    }
}

StringBuilder可变的。只会产生一个。

StringBuilder (或 StringBuffer) 内部使用一个 char[] 数组来存储字符串。当数组容量不足以容纳新的字符时(StringBuilder默认16字节),它会创建一个新的数组,大小是旧数组的2倍+2,然后将旧数组的内容复制到新数组中。

标签:main,String,StringBuilder,连接,字符串,原理,Main,public
From: https://www.cnblogs.com/SimpleWord/p/17689199.html

相关文章

  • 为什么使用int而不是字符串
    title:为什么使用int而不是字符串index_img:https://picss.sunbangyan.cn/2023/07/30/stdtw2.jpgtags:-JavaSE-字符串categories:-JavaSEhide:falseexcerpt:int、字符串效率更高整数数据类型在计算机中的存储和处理效率更高整数是基本的数值类型,......
  • Android虚拟机原理面试题汇总(含详细解析 一)
    Android并发编程高级面试题汇总最全最细面试题讲解持续更新中......
  • 字符串转函数执行
     js'functionmyFunction(){\nconsole.log("Hello,world!");\n}'这个字符串转为函数执行的方式有哪些   将字符串转换为函数执行的方式有以下几种方法:eval():使用eval()函数可以直接执行字符串中的JavaScript代码。例如:javascriptCopyCode......
  • delphi FireDAC 调用 Execute 提示 `[FireDAC][SQL Server Native Client 10.0]字符串
    FireDAC调用Execute提示[FireDAC][SQLServerNativeClient10.0]字符串数据,长度不匹配错误问题调用Execute向SQLServer数据库中批量插入数据时,参数中有BLOB数据类型(ftBlob、ftMemo等)时,出现[FireDAC][Phys][ODBC][Microsoft][SQLServerNativeClient10.0]字符串......
  • Python给你一个字符串,你怎么判断是不是ipv4地址?手写这段代码,并写出测试用例【杭州多测
    ipv4地址的格式:(1~255).(0 ~255).(0 ~255).(0 ~255)1.正则表达式importredefcheck_ip(one_str):compile_ip=re.compile('^(([1-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$')ifcompile_ip.match(one_str......
  • Java语言怎么把输出的字符串用绿色来输出
    importjava.util.Scanner;publicclassGreenConsoleOutput{publicstaticvoidmain(String[]args){//创建一个Scanner对象用于接收用户输入Scannerscanner=newScanner(System.in);//提示用户输入要输出的文本System.out......
  • python实现输入一个字符串,输出第m个只出现过n次的字符
    功能需求输入一个字符串str,输出第m个只出现过n次的字符功能分析1:定义一个函数,函数传入三个参数,分别是输入的字符串、第m个、n次。2:统计每个字符在字符串中出现的次数,然后按照出现次数进行排序。3:找到第m个只出现n次的字符并输出。程序实现deffind_char(str,m,n):#统......
  • PHP7内核实现原理-启动过程
    FPM启动和初始化worker的过程代码在源码/sapi/fpm/fpm/fpm_main.c中fpm_conf_init_main()函数解析php-fpm.conf配置文件,分配workerpool的内存空间。每个workerpool用结构体fpm_worker_pool_s表示,每个pool中的有一个fpm_scoreboard_s结构体,用来管理具体一个......
  • PHP7内核实现原理-基本环境和C基础
    编译安装PHP7.1.0下载7.1.0源码压缩包:www.php.net/releases/./configure--prefix=/Users/lisong/Documents/workspace/php-src/output--enable-fpm编译,报错:configure:error:Pleasespecifytheinstallprefixoficonvwith--with-iconv=iconv是个国际化扩展,暂时用......
  • PHP7内核实现原理-基本架构
    发展史PHP最早是由Lerdorf于1995年,使用Perl语言,以PersonalHomePageTools(PHPTools)的形式创建的,目的是为了方便记录个人网站的访客记录和支持留言本等功能,此时称为PHP1。后来越来越多的网站开始使用PHP并希望能提供更多的功能,之后Lerdorf将PHP开源,此时称为......