解析String类和StringBuilder

2024-08-21 08:48
文章标签 string 解析 stringbuilder

本文主要是介绍解析String类和StringBuilder,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍一下String类

String类是一个final类,不允许被继承

String类是java中有字面值的两个类之一,至于另一个类是什么呢,我也不知道~~...

至于什么是字面值了?

Sting str = "abc";

int i = 12;

这样可以直接赋值就是有字面值的意思

java中在很多时候都会定义一个字符串,而这些字符串有很多重复的,例如,在学生类的班级啊学校啊什么的,都是一些相同的字符串

java中为了不在使用这些重复的字符串浪费空间,就将String定义为了一个final类型的.而且这个str的值是不能改变的,这又是为什么呢?

其实我们在java中经常也会改变一个字符串的值:

String str = "abd";

str = "bcd";

但是为什么说不能改变str的值呢?

在创建"abc"这个字符串的时候是现在串池里找是否有"abc"这个字符串,如果没有则创建一个,如果有就将这个字符串的地址赋给str引用

str = "bcd"这句话呢其实有几个过程,首先创建"bcd"字符串,再将地址赋给str,其实这时候改变的只是str所存的地址,"abc"这个字符串对象其实还存在于串池中.

经典面试题:

String str = new String("abc");

这及代码创建了几个对象?

答案是两个

首先,在串池中创建了一个"abc"的对象,然后new了一个String对象,这个对象是存储在Heap(对空间)中的,是调用了String类的以字符串类型为参数构造方法.


所以在执行这样个代码的时候:

String str = "A"+"B"+"C"+"D";

会创建许多的对象,而最终我们需要的其实只有最后的字符串对象

其它的中间对象都沦为了垃圾对象,造成了内存的浪费

这时候Sun公司为我们提供了一个StringBuilder类,这个类创建的对象是存在Heap(堆空间)中的,它的值时可以改变的,在我们进行大量的字符串连接的时候就不会产生垃圾对象了

String str;

Sting str1 = "A";

for(int i=0;i<10000;i++){

Str+=Str1;

}

StringBuilder str2 = new StringBuilder("");

for(int i=0;i<10000;i++){

str2=str2.append(str1);

}

上面这两种方式产生最后的结果都是一样的.但是下面StringBuilder方式比上面的方式快了几千倍


没什么写的了














这篇关于解析String类和StringBuilder的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092690

相关文章

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数