java学习(109):StringBuilder,stringbuffer,string区别

String、StringBuffer和StringBuilder区别

1、长度是否可变

  • String 是被 final 修饰的,他的长度是不可变的,就算调用 String 的concat 方法,那也是把字符串拼接起来并重新创建一个对象,把拼接后的 String 的值赋给新创建的对象
  • StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象,StringBuffer 与 StringBuilder 中的方法和功能完全是等价的。调用StringBuffer 的 append 方法,来改变 StringBuffer 的长度,并且,相比较于 StringBuffer,String 一旦发生长度变化,是非常耗费内存的!

2、执行效率

  • 三者在执行速度方面的比较:StringBuilder > StringBuffer > String

3、应用场景

  •  如果要操作少量的数据用 = String
  • 单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
  • 多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

StringBuffer和StringBuilder区别

1、是否线程安全

  • StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问),StringBuffer是线程安全的。只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。

2、应用场景

  • 由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
  • 然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。 append方法与直接使用+串联相比,减少常量池的浪费。

字符串联的方式

1、测试案例:

package ecut.strings;/*** 当 字符串 变量 参与 串联 操作时* 是通过 StringBuilder ( 或 StringBuffer ) 类及其 append 方法实现的*/
public class StringTest5 {public static void main(String[] args) {String a = "abc" ;String b = "xyz";String d = "abcxyz" ;// 两个字符串字面值 通过 + 串联,直接在 池中完成String c = "abc" + "xyz" ; // + 是 "串联" 作用System.out.println( c == d );System.out.println( "~~~~~~~~~~~~~~" );// 字符串串联是通过 StringBuilder ( 或 StringBuffer ) 类及其 append 方法实现的// 1、StringBuilder sb = new StringBuilder( a );// 2、sb.append( b ) ;// 3、sb.toString() ---> new String( chars )String e = a + b ;System.out.println( e == c );System.out.println( e == d );String f = e.intern();System.out.println( f == d );//JAVA编译器对string + 基本类型/常量 是当成常量表达式直接求值来优化的。  运行期的两个string相加,会产生新的对象的,存储在堆(heap)中 String g = a + "xyz" ;//a为变量,在运行期才会被解析。 System.out.println( g == c );final String h = "abc" ;String i = h + "xyz" ;System.out.println( i == c );//h为常量,编译期会被优化  }}

运行结果如下:

true
~~~~~~~~~~~~~~
false
false
true
false
true

两个字符串字面值 通过 + 串联,直接在 池中完成,例如String c = "abc" + "xyz" ; + 是 "串联" 作用。两个string对象用+,是在编译器被优化为StringBuild再进行append()。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

etlgr是什么服务器_ETL是指什么 - 金融行业 - ITPUB论坛-中国专业的IT技术社区

ETL 简介 frim wwwETL是建置或更新数据仓储中的内容时,对于所需之数据进行数据撷取、转换、加载的过程,由字面上即能得知它是由三个环环相扣的步骤所组成:Extract - 数据撷取、Transform - 数据转换与Load - 数据加载 。ETL ( Extract-Tran…

楚留香手游系统互通的服务器,楚留香手游互通服务器汇总 哪些服能一起玩

楚留香手游互通服务器汇总 哪些服能一起玩由第一手游网小编为大家带来,游戏中有一些服务器它的安卓和ios是互通的可以一起玩的,楚留香手游哪些服能一起玩?哪些服务器互通?来看看吧!楚留香手游互通服务器汇总少侠不必担…

1001 A+B Format (20 分)

题意&#xff1a;给出俩个整数a,b(不超过10^9) &#xff0c;求ab的值 &#xff0c;并按照xxx,xxx,xxx的格式输出 #include <iostream> using namespace std; int main() {int a, b;cin >> a >> b;string s to_string(a b);int len s.length();for (int i …

java学习(110):日期date类

import java.util.Date; import java.util.Scanner;public class test51 {public static void main(String[] args){Scanner innew Scanner(System.in);System.out.println("请输入员工信息");test50 empnew test50();System.out.println("请输入员工姓名"…

上传文件Base64格式(React)

记录一下上传文件时将文件数据转为Base64的方法 通过 FileReader对象创建一个实例&#xff0c;然后使用 readAsDataURL方法将数据转为Base64格式 注意: 读取过程是异步的 绑定onload事件&#xff0c;该事件在数据读取完成后触发 具体代码&#xff08;react项目中&#xff09;&a…

修改fragment的进入动画_3DsMax—牛顿摆球(动量守恒摆球)动画

最终效果本篇为图文教程&#xff0c;已经将牛顿摆球动画视频教程放到3dsmax学习网中&#xff0c;需要看视频教程的请到3DsMax学习网(www.dddmax.cn)教程中观看。01打开一个牛顿摆球模型&#xff0c;如图所示。(模型素材链接在底部)02进入层次面板&#xff0c;开启【仅影响轴】&…

服务器水厂物资管理系统,水处理管理系统及水处理管理服务器 Water management systems and water treatment management server...

摘要&#xff1a;The present invention relates to a water treatment management system and a water treatment management server. As adjustment for the operators which are related with the water source is difficult, utilization of the regenerated water from th…

java学习(111):日期时间格式化

package com.zx; import java.text.DateFormat; import java.util.Date; //员工信息类 //date类 public class test50 {private String name;private String sex;private Date birth;public void showme(){System.out.println(this.getName());System.out.println(this.getSex(…

Java中组合、继承与代理之间的关系。

在Java中如何将一个已经定义好的类尽可能多的重复使用是提高开发效率和质量的关键。而下面我们要讲述的三种方式便是涉及到怎样去复用类让代码更优雅。 一、组合 定义&#xff1a;在新的类中产生现有类的对象。 组合的例子其实随处可见&#xff0c;比如说我们在类中定义一个Str…

鳗鱼刺多怎么处理图像_怎么在做鱼前去除鳗鱼刺?

展开全部去除鳗鱼鱼32313133353236313431303231363533e59b9ee7ad9431333365633937刺的方法: 鳃除法和背除法一、鳃除法1、将鱼洗净&#xff0c;去鳞、鳃、鳍后&#xff0c;从鳃部取出内脏。2、擦干水分&#xff0c;平放在菜墩上&#xff0c;掀起鳃盖&#xff0c;把头与脊骨连接…

游戏服务器红点系统,Unity简易的红点系统RedPoint System

由于是展示&#xff0c;主要就三个脚本using System.Collections;using System.Collections.Generic;using UnityEngine;public class RedPointConst{public const string main "Main";public const string mail "Main.Mail";public const string mailSy…

java学习(112):simpledateformat进行格式化

package com.zx; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; //员工信息类 //date类 public class test50 {private String name;private String sex;private Date birth;public void showme(){System.out.println(this.getName…

[转帖]什么是α射线、β射线、γ射线

什么是α射线、β射线、γ射线 https://www.sohu.com/a/230945619_1001247211、α射线 放射性核素发生衰变时放出α粒子&#xff0c;产生α射线。α粒子是一个高速运动的氦原子核。对于天然放射系列的核素放出α粒子的能量一般在4&#xff5e;8兆电子伏(MeV)范围&#xff0c;初…

matlab 写excel 慢_我在12w+的Python库中,发现了让Excel快到起飞的秘密......

Amber | 作者图片源自网络在这篇文章里&#xff0c;小编向大家介绍了Excel在数据分析中的妙用。不知大家在看完后&#xff0c;有没有亲自动手去体验下呢&#xff1f;有没有遇到什么问题呢&#xff1f;虽说Excel在处理小批量数据时的优势显而易见&#xff0c;但软件终究不是万能…

华为云服务器安装win10系统,云服务器可以安装win10吗

云服务器可以安装win10吗 内容精选换一换本节定义了云耀云服务器上报云监控的监控指标的命名空间&#xff0c;监控指标列表&#xff0c;各项监控指标的具体含义与使用说明&#xff0c;用户可以通过云监控检索云耀云服务器服务产生的监控指标和告警信息。SYS.ECS对于不同的操作系…

java学习(113):Calendar类

import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class test53 {public static void main(String[] args){//获取当前时间并且获取当前系统时间创建一个日历实例Calendar calCalendar.getInstance();//获取当前时间的年月日int …

CEF 添加F5刷新快捷键

Keyboardcodes&#xff1a;https://www.androidos.net.cn/android/4.3_r1/xref/external/webkit/Source/WebCore/platform/chromium/KeyboardCodes.h 1.首先要让我们自己的CefClient这个类公有继承CefKeyboardHandler 2.添加键盘事件构造函数 virtual CefRefPtr<CefKeyboard…

python 离散数据时间序列图_每个人都学的会的数据分析

数据分析已经成为数据时代各行各业突破各自行业发展瓶颈的最有效手段&#xff0c;无论是公司职员还是个体商户或大公司管理者&#xff0c;都需要有数据分析的能力。很多人认为数据分析能力就是对数据进行描述和做出漂亮的统计图形的能力&#xff0c;这是狭隘的理解。数据分析能…

java学习(114):Calendar类方法before

import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; //员工信息类 //date类 public class test50 {private String name;private String sex;private Date birth;public void showme(){System.out.println(this.getName());System.out.p…

12.06

尝试编写&#xff0c;多种方法实验&#xff0c;先学会表格控件的导入导出转载于:https://www.cnblogs.com/qss520/p/10101524.html