【JavaSE】String相关知识

news2024/10/6 1:39:06

String \ StringBuilder \ StringBuffer

String的值是不可变的,使用“+”或者“=”的方法尝试改变String的值并不是在原本的基础上修改,而是赋值给了新的字符串常量引用

StringBuffer是线程安全的,使用的是无脑加synchronized的方法

这三者的运行速度,StringBuilder > StringBuffer> String,这里的运行速度主要通过字符拼接时间来进行比较。String最慢是因为拼接过程需要创建大量无用对象造成资源消耗,StringBuffer慢是因为有加锁机制。

p.s.StringBuffer其实不一定比StringBuilder慢(在拼接量不够大的时候),因为通过一个缓冲区优化了性能。

带String的“+”运算

Java规范,“+”中有String的时候默认转换成String拼接

(基于任意类型都能通过toString转换成String类型,或者说是StringBuilder.append())

String的对象创建过程

首先需要明确的

  1. 有new才有新的对象:假如我写的是String s = "Matty" + "lyh"呢,"Matty"和"lyh"并没有创建新对象,这两个字符串是直接被定义为了常量池中的字符串常量。

  1. 不是所有String都存在常量池中:通过new创建的String对象,是在堆中存放的。而常量池是在方法区的(JDK 1.7后改到堆的元数据区了)。

创建对象分析举例:

String s = new String("Matty") +  new String("lyh");

这个语句创建了六个对象:

两个字符串常量池对象,两个String对象,一个StringBuilder对象(字符串相加是通过StringBuilder的append实现的),一个String对象(字符串相加结束后,由StringBuilder的toString返回一个String对象)。

使用“==”和“equals”比较String

插播“==”的用法:当比较的对象是基础数据类型时,比对的就是数据是否相同,比如int、boolean、double等;当比较的对象是引用数据类型时,比对的就是内容的引用的地址是否相同。

看看下列几种情况:

String a = "a";
String b = "a";
System.out.print(a==b);//true
System.out.print(a.equals(b));//true

a、b都指向同一个常量池对象“a”,使用“==”比较的时候比较引用对象的地址都是“a”所在的堆地址。

String c = new String("MY");
String d  = "M" + "Y";
System.out.print(c==d);//false
System.out.print(c.equals(d));//true

d的拼接结果为“MY”,但是由于没有new,所以没有创建新对象,所以d的“MY”是存在常量池中。而c是引用了new的String对象,所以c的“MY”存在堆中,所以两个引用指向的不是同一个地址。

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

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

相关文章

10分钟上手一款好用的服务器节点监测工具(Server 酱)

Server 酱简介 Server酱,英文名「ServerChan」,是一款「手机」和「服务器」、「智能设备」之间的通信软件。说人话?就是从服务器、路由器等设备上推消息到手机的工具。开通并使用上它,只需要一分钟: 微信扫码登入设置…

Mysql可视化软件-Navicat和SQLyog

Navicat 可以将mysql可视化的一个软件 可以避免一直在命令行里面敲代码,很难绷 连接 密码写一个你能记住的,不然打不开连接 对应的IP可以是localhost或者127.0.0.1 都是本机 端口号就我们在my.ini写的那个 然后进行我们上面说的操作-新建一个数据库先…

Linux操作系统常用命令

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Java案例分…

【uniapp】记录地址管理页面

uniapp中的地址管理页面 <template><view class"container"><view class"oldaddress" v-for"(item,index) in cardInfo" :key"index"><view class"topview"><view class"name">{{i…

线缆行业单绞机控制算法(详细图解+代码)

在了解单绞机之前需要大家对收放卷以及排线控制有一定的了解,不清楚的可以参看下面几篇博客,这里不再赘述,受水平和能力所限,文中难免出现错误和不足之处,诚恳的欢迎大家批评和指正。 收放卷行业开环闭环控制算法 PLC张力控制(开环闭环算法分析)_RXXW_Dor的博客-CSDN博…

Win10专业版系统Docker安装、配置和使用详细教程

一、win10专业版系统首先需要开启硬件虚拟化及Hyper-V功能&#xff0c;才能进行Docker for Windows软件安装。 如何开启硬件虚拟化&#xff0c;自行百度。可在任务栏中查看虚拟化是否开启。 win10系统&#xff0c;打开控制面板-“应用”-“程序和功能”&#xff0c;开启Hyper-V…

webpack 的基本使用

webpack 的基本使用配置 npm 镜像源创建列表隔行变色案例新建空白项目目录&#xff0c;初始化 package.json 配置文件通过 npm 安装 jquery新建 src 源代码目录index.htmlindex.js检查网页效果webpack 的安装webpack 的安装dependencies 与 devDependencies参数 -S 及 --save参…

【Linux工具】-yum/gdb

yum/gdb一&#xff0c;yum1&#xff0c;简介2&#xff0c;软件下载3&#xff0c;软件删除4&#xff0c;yum源与扩展yum源5&#xff0c;常见选项二&#xff0c;gdb1&#xff0c;简介2&#xff0c;gdb相关指令一&#xff0c;yum 1&#xff0c;简介 在Linux下&#xff0c;下载软…

中国芯片迎难而上,4纳米芯片量产,美媒:美国或肠子都悔青了

日前美国媒体《财富》杂志发表相关文章&#xff0c;认为对中国的芯片限制对美国是弊大于利&#xff0c;倒逼中国芯片加快芯片产业发展进程&#xff0c;而美国芯片却蒙受了太大的损失&#xff0c;与美国方面打擂台。美媒发表这篇文章之际&#xff0c;恰恰是中国芯片企业宣布近期…

TikTok不可思议的崛起

武汉瑞卡迪电子商务有限公司&#xff1a;《华尔街日报》网站11月5日发表题为《TikTok不可思议的崛起》的文章&#xff0c;全文摘编如下&#xff1a; 在短短五年里&#xff0c;TikTok已经爆发成为一种流行文化现象以及一个地缘政治闪爆点。它是全世界最热门的应用&#xff0c;被…

Vue纯前端:榜单管理系统

文章目录:一、主要功能&#xff1a;二、实现效果&#xff1a;1.主页:2.注册&#xff1a;3.登录&#xff1a;4.列表界面&#xff1a;5.添加应用界面&#xff1a;6.修改应用界面&#xff1a;7.模糊查询&#xff1a;三、整体架构&#xff1a;四、配置文件说明&#xff1a;五、功能…

icp备案号怎么申请?icp备案号哪里查询

ICP备案就是对网站的开办者信息的备案登记&#xff0c;以确保网站开办者的真实合法性。购买域名后&#xff0c;需要通过ICP备案才能开通域名解析服务。未通过ICP备案的网站&#xff0c;会有被查处关停的风险&#xff0c;备案的目的就是为了防止在网上从事非法的网站经营活动&am…

nexus可以访问但是maven无法拉取jar的一种答案

现象&#xff1a; 错误日志&#xff1a; Could not transfer metadata com.*.*:*-common-lib:2.0.0-SNAPSHOT/maven-metadata.xml from/to nexus-snapshot (https://mvn.*.*.com.cn/repository/snapshots/): sun.security.validator.ValidatorException: PKIX path building f…

【操作系统实验/Golang】实验1:进程调度(FCFS, SJF, RR)

1 实验问题描述设计程序模拟进程的先来先服务FCFS、短作业优先SJF和时间片RR算法的调度过程。假设有n个进程分别在T1, … ,Tn时刻到达系统&#xff0c;它们需要的服务时间分别为S1, … ,Sn。如果选择RR算法&#xff0c;还需要指定时间片大小q。分别采用三种进程调度算法进行调度…

Java EE|多线程之线程状态与线程安全

文章目录一、线程状态线程状态分类线程各状态剖析线程状态的转移二、线程安全线程不安全举例线程安全概念线程不安全的原因剖析Java标准库中的线程安全类与不安全类线程不安全问题的规避方案一&#xff1a;加监视锁方案二&#xff1a;加volatile关键字方案三&#xff1a;使用wa…

Mybatis框架,以 paramDTO对象集合形式进行批量查询。

在日常工作中&#xff0c;我们时常遇到数据库表中以 (name code) 为唯一索引&#xff0c; 在数据查询时需要根据这一组条件查询出表中唯一1条数据。 有时&#xff0c;我们的入参是 List<DTO> &#xff0c;需要进行批量查询数据。那么可以使用以下的SQL来进行数据的查询…

崔宝秋国际开源经验在小米开花 | 开源英雄

【编者按】崔宝秋的开源人生&#xff0c;来源于内心的真正热爱&#xff0c;和一路的升级打怪。从少时与计算机结缘到成为自由软件信徒&#xff0c;从IBM、雅虎、LinkedIn 到小米这一路走来&#xff0c;从一个开源的追随者成长为开源的推动者&#xff0c;小米的开源文化、丰硕的…

kettle工具连接elasticsearch 7并导入MySQL表数据-简述

一、简述 工作中需要利用kettle开源ETL工具将MySQL数据库中表数据同步到elasticsearch集群中。为此特记录一下操作方式&#xff0c;留作记录和学习。 二、环境 kettle工具&#xff1a;kettle 9.2 elasticsearch集群&#xff1a;7.11.1 集群配置信息&#xff1a; 集群名称&…

Linux-终端命令行

终端(Terminal)命令行仅仅是一个工具&#xff0c;对于命令有许多&#xff0c;而且随着嵌入式领域不断开发&#xff0c;命令会越来越多&#xff0c;我们只需要去了解常用的即可。 对于创建或删除一个文件夹&#xff0c;清理终端&#xff0c;下载文件等等都可以在终端命令行输入…

Nginx 进阶篇

文章目录Nginx 进阶篇五、 服务配置1、 配置成系统服务2、 配置环境变量六、 部署静态资源1、 概述2、 配置指令2.1 listen2.2 server_name2.3 location2.4 root2.5 alias2.6 index2.7 error_page3、 静态资源优化配置语法4、 静态资源压缩模块4.1 Gzip 模块配置指令4.2 配置实…