常用类与基础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

相关文章

Python中常用的四种取整方式分享

《Python中常用的四种取整方式分享》在数据处理和数值计算中,取整操作是非常常见的需求,Python提供了多种取整方式,本文为大家整理了四种常用的方法,希望对大家有所帮助... 目录引言向零取整(Truncate)向下取整(Floor)向上取整(Ceil)四舍五入(Round)四种取整方式的对比综合示例应

C# string转unicode字符的实现

《C#string转unicode字符的实现》本文主要介绍了C#string转unicode字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1. 获取字符串中每个字符的 Unicode 值示例代码:输出:2. 将 Unicode 值格式化

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

一分钟带你上手Python调用DeepSeek的API

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下... 目录前言免费体验API-Key申请首次调用API基本概念最小单元推理模型智能体自定义界面总结前言最