浅析Java的字符串的底层和相关知识(恳请大佬指正)

本期经验和建议的总结:

在拼接字符串的时候,如果大量拼接时建议使用StringBuilder,在转为字符串。

1:Java的==号比较的原理:

在Java中,==号在对基本数据类型进行比较时,比较的时具体的数值大小例如double,int之流。
在针对引用数据类型的比较中,我们发现比较的是引用数据类型的地址是否相同,所以我们在比较引用数据类型的对象是否相等时,基本上要使用equals方法,在这里我们记得要重写equals方法。

2:字符串的拼接原理

在这里我们分成两种情况来讲,分别是常量直接的拼接变量加常量的拼接

常量的直接拼接:

举例子:在这里插入图片描述
在这里我们使用常量进行的拼接,他会直接在串池里进行拼接出现,如果串池里有现成的就复用,而不是直接新建。举个例子和代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Scanner;public class Main3 {public static void main(String[] args) throws IOException {Scanner sc=new Scanner(System.in);String a="a"+"b"+"c";String b="abc";String c="a"+"b"+"c";System.out.println(a==b);System.out.println(b==c);System.out.println(a==c);}}

在这里插入图片描述
我们可以清楚的看到,字符串a拼接在串池里留下了abc,而b等于abc,由于也是常量拼接,所以直接复用串池的abc,字符串c的也是同理,他们会看看串池里是否有已经出现abc,已经出现就直接复用,为出现就自己开一块内存进行存储。
在这里插入图片描述
在这里插入图片描述

继续看以上字符串d就是abd之前未在串池留下,无法复用,所以==号比较地址的时候地址不同,返回false,而之前的哪个等于号比较地址返回true就是说明他们的地址相同,这也证实了我们的字符串复用的观点。

变量的拼接:

变量的拼接就是直接地址不同了,在这里简单来聊一下拼接的底层处理过程吧。
在jdk8以前的版本,使用字符串变量的拼接

 String d="abd";String e=d+"12";

过程中,他会首先在底层内存中首先开一个StringBuilder,然后将数据在这个字符串容器中进行拼接,之后再开一个字符串对象返回这个字符串对象。我们可以看到在jdk8以前字符串的拼接是耗时耗力的。那JDK8以后呢?
在JDK8以后,不在直接开StringBuilder的对象了,而是直接在内存中开一个数组,来预估要拼接的字符串的大小,返回一个新的字符串。我们看到,在这里空间开销变小了,但是预估拼接的字符的大小仍然要花费大量的时间(多个拼接),所以使用+号拼接效率不高。
所以在处理时建议使用StringBuilder。

3:StringBuilder的存储拼接字符的原理

首先,它StringBuilder默认的存储容量是16,存储16个字符,一旦超过16这个数,他会开到34,但是超过34就是直接你存储的字符是多少位,它就开多少位了。

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

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

相关文章

基于Google Gemini 探索大语言模型在医学领域应用评估和前景

概述 近年来,大规模语言模型(LLM)在理解和生成人类语言方面取得了显著的飞跃,这些进步不仅推动了语言学和计算机编程的发展,还为多个领域带来了创新的突破。特别是模型如GPT-3和PaLM,它们通过吸收海量文本…

C# winform s7.net expected 22 bytes.”

S7.Net.PlcException:“Received 12 bytes: 32-02-00-00-00-00-00-00-00-00-81-04, expected 22 bytes.” 原因是博图的连接机制未勾选

使用CSS3 + Vue3 + js-tool-big-box工具,实现炫酷五一倒计时动效

时间过得真是飞速,很快又要到一年一度的五一劳动节啦,今年五天假,做好准备了吗?今天我们用CSS3 Vue3 一个前端工具库 js-tool-big-box来实现一个炫酷的五一倒计时动效吧。 目录 1 先制作一个CSS3样式 2 Vue3功能提前准备 3…

Linux SDIO-WiFi 协议栈

Linux SDIO-WiFi 协议栈 1. 简介2. BCMDHD2.1 WiFi模组2.2 驱动初始化(dhd_module_init) 3. Broadcom fullmac WLAN 1. 简介 2. BCMDHD BCMDHD:Broadcom Dongle Host DriverSIP:System In Package 2.1 WiFi模组 2.2 驱动初始化…

嬴图| ISO/IEC-GQL国际图语言标准发布,图技术开启新纪元

GQL作为继SQL之后的第二个数据库查询语言国际标准,近日正式发布。这标志着图技术开启新纪元——图时代即将到来! 同时,这也预示着将有越来越多的组织采用“图”来解决各种复杂问题,更意味着SQL系统与负载将逐渐转向GQL&#xff0…

注意力机制(三)(不同注意力机制对比)

​🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀《深度学习基础知识》 相关专栏: ⚽《机器学习基础知识》 🏐《机器学习项目实战》 🥎《深度学习项目实…

【Harmony3.1/4.0】笔记五

概念 本文综合row,column作为主要布局,结合image组件,text组件,textimput组件,button组件以及轮播布局搭建登录页面 效果图 ArkTS代码 //登录综合页面 Entry Component struct Five{//添加图片State imgs:Resource[…

C#:变量的更多内容

枚举:一种变量类型,用户定义一组可能的离散值,这些值可以用人们能理解的方式使用。 结构:一种合成的变量类型,由用户定义的一组其他变量类型组成。 数组:包含一种类型的多个变量,允许以索引方…

kubernetes中的附件组件Metrics-server与hpa资源实现对pod的自动扩容和缩容

一、概述 Metrics-Server组件目的:获取集群中pod、节点等负载信息; hpa资源目的:通过metrics-server获取的pod负载信息,自动伸缩创建pod; 二、安装部署 Metrics-Server组件 安装目的,就是给k8s集群安装top…

RustGUI学习(iced)之小部件(二):如何使用滑动条部件

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述…

基于springboot+vue的民法普及系统的设计与实现

1、系统演示视频(演示视频) 2、需要请联系

kafka部分partition的leader=-1修复方案整理

kafka部分partition的leader-1修复方案整理 1. 背景说明2. 修复测试2.1 创建正常的topic并验证生产和消费2.2 停止kafka模拟leader-12.3 修复parition2.4 修复完成验证生产消费是否恢复 3. 疑问和思考3.1 kafka在进行数据消费时,如果有partition的leader-1&#xff…