JAVA基础:String字符串

news2024/9/20 10:41:57

目录

前言

String的内部机制

String的两种创建方式


前言

关于String字符串我们并不陌生,在我们的程序中经常使用String这个类,甚至有的同学会把string当成基本数据类型,今天我们就来了解一下String这个类

String的内部机制

我们把string称为不可变字符串,意思是字符串一旦创建其内容就不能改变了,我们之前使用的字符串连接也好或者别的操作,只要是string这个类,并且结果返回了一个字符串,那么这个字符串就一定是新产生的字符串,而不是在原有字符串的基础上修改得到的

那么string的内部机制是什么样的呢?

通过源码我们知道,string的底层也是用一个字符数组来存储字符串的

我们进一步分析这个名为value的成员变量中存放的是什么?

因为数据类型是字符数组类型,所以这个value中存的是数组在堆内存中的地址,并且这个value被final修饰了,被final修饰的属性我们称为常量其值不能改变,并且只能赋值一次

通过分析我们知道了string的内部存放数据的数组的地址值不能改变,所以这个数组不能进行扩容,那么理论上我们应该可以改变数组中的值,但是为什么改变不了呢?

是因为string内部并没有对外提供可以改变内部数据的方法,所以我们没法改变,并不是不能变,是string不想让外界改变内部数据

String的两种创建方式

string的创建方式有两种

  • 使用构造方法创建对象

 这种方法就是用new关键字正常创建对象,string提供了很多构造方法

String s = new String();
String s = new String("123") ;
String s = new String(new char[]{'1','2','3'}) ;
String s = new String(new byte[]{97,98});

·我们可以创建空参的,直接传入一个字符串,传入一个字符数组,或者传入一个byte类型的数组,再通过ASCII码转换成对应的字符

  • 使用双引号创建字符串

这也是string特别的地方,正是因为这种看上去像直接赋值的方式,让很多同学觉得string是一基本数据类型,其实string是一个引用数据类型,无论哪种方式变量中存的都是地址,所有双引号中的字符串都是存在常量池中的

如果我们使用双引号,底层会去内存中的常量池中查看这个双引号中的字符串在常量池中存不存在 ,如果存在那么就直接使用常量池中的,如果不存在就在常量池中新创建一个

这就是两种创建方法是区别,常量池中的一样的字符串只会创建一个,下次再使用这个字符串就是一个地址的字符串,而new的字符串对象每次都是一个新的对象,即使内容相同,地址也不同。

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

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

相关文章

nature immunology | BACH2调控“调节性”和“促炎性”TH17细胞的染色质多样化状态

–https://doi.org/10.1038/s41590-024-01901-1 BACH2 regulates diversification of regulatory and proinflammatory chromatin states in TH17 cells 留意更多内容,欢迎关注微信公众号:组学之心 研究团队和研究单位 Aviv Regev–Genentech Vijay …

深度学习入门——深度学习

加深网络 前情回顾 构成神经网络的各种层学习时的有效技巧对图像特别有效的CNN参数的最优化方法 向更深的网络出发 网络特点 基于33 的小型滤波器的卷积层。激活函数是ReLU。全连接层的后面使用Dropout层。基于Adam的最优化。使用He初始值作为权重初始值。 进一步提高识别精…

【Linux】yum(工具篇)

文章目录 前言:什么是软件包yum 的介绍yum源yum源的配置第三方源的配置官方源的配置镜像站点安装wget包备份本地yum源配置网易yum源重新生成yum缓存 前言:什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程…

【学术会议征稿】第三届环境遥感与地理信息技术国际学术会议(ERSGIT 2024)

第三届环境遥感与地理信息技术国际学术会议(ERSGIT 2024) 2024 3rd International Conference on Environmental Remote Sensing and Geographic Information Technology(ERSGIT 2024) 第三届环境遥感与地理信息技术国际学术会议(ERSGIT 20…

LVS-DR集群的部署

LVS-DR集群 LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一种工作模式。 LVS-DR工作原理 LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用,节点 DirectorServer 与 Real Serve…

zabbix7.0TLS-01-部署服务端

文章目录 1 介绍1.1 架构1.2 主要概念和名词1.3 最新 7.0 TLS 版本的部分新特性更灵活的资源发现和管理 2 官方部署指导地址3 在 Rocky Linux 9 上安装 zabbix3.1 安装软件包3.2 创建初始化数据库3.3 配置zabbix-server3.4 启动Zabbix server和agent进程3.5 默认监听端口3.6 访…

Linux中Samba服务配置和管理

文章目录 一、Samba介绍1.1、Samba是什么1.2、Samba的核心功能1.3、Samba的主要组件1.4、Samba的工作流程1.5、Samba主要配置文件smb.conf 二、Samba安装2.1、更新yum源2.2、安装Samba客户端和服务器软件包2.3、启动Samba 三、Samba的使用3.1、设置Samba服务的全局选项3.2、tes…

Simulink模型开发中的一些自动化方法

随着Simulink模型的产品化开发进程,许多模型开发人员会关心模型的建模自动化问题。比如如何对模型中的元素进行批量查找和修改;如何构建自己的建模规则对模型进行检查;如何实现测试自动化等。在这些使用场景中我们都需要了解一些Simulink函数…

Puppeteer-py:Python 中的无头浏览器自动化

1. 引言 在当今快速发展的互联网时代,自动化测试和数据抓取变得越来越重要。Puppeteer-py 作为一个 Python 库,提供了一种简单而强大的方法来控制无头浏览器,实现网页的自动化操作。无论是进行端到端的测试,还是抓取动态生成的数…

公司新来的两个Java后端,因题背太熟轻松过面试?

以前面试是背八股文,而2024年的后端面试都是流行问场景题!建议大家把面试想简单一点,顺的场景题直接给有需要的人,希望能对大家有所帮助! 由于平台篇幅原因,很多java面试资料内容展示不了,需要…

【HarmonyOS NEXT星河版开发学习】小型测试案例03-QQ音乐登录

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面(暂未发布) 前言 本案例使用的还是一些基础的语法,主要是知道如何去布局以及分析,Harmony的布局方式也是特别多,没必…

java基础 之 重写equals时为什么要重写hashCode

文章目录 前言回答了解哈希hashCode()总结 前言 了解equals戳这里→java基础 之 equals和的区别 请记住这句话:两个对象相同,哈希码一定相同。哈希码相同,两个对象不一定相同。 回答 只重写equals()方法,不重写hashCode()方法&…

【漏洞复现】致远互联FE协作办公平台 apprvaddNew.jsp SQL注入

文章目录 0x00 漏洞描述影响范围 0x01 测绘工具0x02 漏洞复现0x03 Nuclei检测脚本0x04 修复建议0x05 免责声明 0x00 漏洞描述 致远互联FE协作办公平台是一款为企业提供全方位协同办公解决方案的产品。 在受影响的版本中,攻击者可以未授权访问/witapprovemanage/app…

Animate软件动画类型简介

在Animate软件中,有三种基本的补间动画和一种逐帧动画,这里就简单讲一下这几种动画的概念。 FlashASer:AdobeAnimate2021软件零基础入门教程https://zhuanlan.zhihu.com/p/633230084 FlashASer:实用的各种Adobe Animate软件教程…

Java第一个程序的开发

开发三步骤 编写: a.创建一个文本文档,将后缀名改成.java,变成一个java文件 b.注意:我们需要将文件的后缀名显示出来 编译: a.命令:javac java文件名.java b.注意:javac会将java文件编译,生成一个.class文件(字节码文件),jvm运行只认class文件 运行: a.命令:java class文件名…

开发一个自己的VSCode插件

1、前言 对于一个前端开发者来说,开发工具,最常用的应该就是VSCode了,因为它免费,速度快,提供了丰富了插件等优点,使得越来越多的前端开发者都来使用它了,在开发的时候如果有丰富的插件提供支持…

Spring Cloud微服务项目集成MyBatis

在现代软件开发中,微服务架构已经成为一种流行的解决方案,它能够将应用程序拆分成多个小的、独立的服务。每个服务负责一个特定的业务功能,并可以独立部署和扩展。Spring Cloud是一个提供各种工具和框架以支持微服务开发的开源框架&#xff0…

【工具】Sublime配置Anaconda的Python环境的简单方法

1 背景 Sublime Text对Python特别友好,自带Python编译器。只需CtrlB就能编译并控制台输出,特别适合小脚本的调试。 在安装了Anaconda后,如何使用Sublime Text调用Anaconda的Python以及Anaconda附带的众多实用的库呢? 也很简单。…

一个全新低代码快速开发平台,基于Activiti7和Vue3全开放式流程,简洁且强大(附源码)

前言 在当今数字化时代,企业面临着快速变化的市场环境和日益复杂的业务需求。现有的软件开发模式往往存在开发周期长、成-本高、迭代速度慢等问题,难以满足企业对快速响应市场变化的需求。此外,传统的开发平台往往缺乏灵活性和扩展性&#x…

servlet内存马

参考视频&#xff1a;java内存马专题1-servlet内存马 创建javaweb项目&#xff0c;勾选servlet 我们可以将idea给的注释写法&#xff0c;改到web.xml里面 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xm…