常用类与基础API-String的理解和不可变性

2024-02-19 11:12

本文主要是介绍常用类与基础API-String的理解和不可变性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.String类的理解

1.1类的声明

public final class String

>final :String是不可继承的。

>Serializable :可序列化的接口,凡是实现此接口的类的对象就可以通过网络或本地流进行数据的传输

>comparable:凡是实现此接口的类,其对象都可以比较大小.

1.2内部声明的属性

jdk8:

private final char [ ] value;//储存字符串数据的容器

>final :指明此value数组一旦初始化,其地址就无法改变.

jdk9之后:为了节省内存空间而做的优化.

private final byte [ ] value;//储存字符串数据的容器

2.字符串常量的储存位置

>字符串常量都存储在字符串常量池(StringTable)中

>字符串常量池中不允许存放两个相同的字符串常量

>字符串常量池,在不同的jdk版本中,存放位置不同.

jdk7及之前,字符串常量池储存在方法区中.

jdk7之后,字符串常量池储存在堆空间中,静态变量也在堆空间中.

3.String的不可变性:每个点会配一个例子和一个运行图

当对字符串变量重新赋值时,需要重新指定一个字符串常量的位置进行赋值,不能再原有的位置更改

下面这个例子s1输出是hello,内部的原理在下图.

@Testpublic void test(){String s1 ="hello";String s2 ="hello";s2="hi";System.out.println(s1);}

当对现有的字符串进行拼接操作时,需要重新开辟空间保存拼接以后的字符串,不能在原有的位置修改

下面这个例子s1输出是hello,s2输出是helloworld,内部的原理在下图.

@Testpublic void test1(){String s1 ="hello";String s2 ="hello";s2+="world";System.out.println(s1);System.out.println(s2);}

当调试字符串的replace( )替换现有的某个字符时,需要重新开辟空间保存修改以后的字符串,不能在原有位置修改.

下面这个例子s1输出是hello,s2输出是hello,s3输出是hewwo,内部的原理在下图.

@Testpublic void test2(){String s1 = "hello";String s2 = "hello";String s3 = s2.replace('l','w');System.out.println(s1);System.out.println(s2);System.out.println(s3);}

这篇关于常用类与基础API-String的理解和不可变性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

使用SpringBoot创建一个RESTful API的详细步骤

《使用SpringBoot创建一个RESTfulAPI的详细步骤》使用Java的SpringBoot创建RESTfulAPI可以满足多种开发场景,它提供了快速开发、易于配置、可扩展、可维护的优点,尤... 目录一、创建 Spring Boot 项目二、创建控制器类(Controller Class)三、运行

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举