Java中String类型的变量为什么是不可变的

想相信很多小伙伴在学Java的时候都学到了:Java中的字符串即 String 变量是不可变的,但是为什么呢?我们看 String 的源码:

在这里插入图片描述
通过源码可以看到,其实 String 类型的变量,内部是一个 byte 数组 value,也就是说“apple”这个字符串,其实内部存储的时候是这样的:[‘a’, ‘p’, ‘p’, ‘l’, ‘e’],但是由于这个 byte 数组被 final 修饰,所以它不可被改变。但是又有小伙伴问了:final 修饰的常量的值不可变,final 修饰的引用类型的地址不可变,这个数组是引用类型,我这里不改数组地址,我只改内容不就行了?其实是不行的。这里我们能看到这个 byte 数组被 private 修饰,也就是说别人是看不到也改不了 value 里面的东西的。又有小伙伴问了,虽然你被 private 修饰,但是我用 get 和 set 方法不就可以访问和设置了吗?不好意思,String 这个类的源码中没有对 value 数组的 get 和 set 方法。
这样,Java 通过两个修饰符 finalprivate 实现了无法让我们开发人员修改 String 类型变量的目的了。

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

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

相关文章

GCN 翻译 - 2

2 FAST APROXIMATE CONVOLUTIONS ON GRAPHS 在这一章节,我们为这种特殊的的图基础的神经网络模型f(X, A)提供理论上的支持。我们考虑一个多层的图卷积网络(GCN),它通过以下方式进行层间的传播: 这里,是无…

Mac 安装JDK,并通过命令切换不同版本jdk

mac电脑安装了jdk8、jdk11、jdk21 三个版本的jdk,在环境变量中配置命令,动态切换不同jdk 1.下载JDK,Mac建议下载xxxxx/jdk-21_macos-x64_bin.dmg https://download.oracle.com/java/21/latest/jdk-21_macos-x64_bin.dmg, 2.双击安…

SAR ADC学习笔记(4)

CDAC电容阵列 一、电容失配 二、电容失配对CDAC线性度的影响 1.电容失配对DNL的影响 2.电容失配对INL的影响 三、分段结构的CDAC 四、CDAC开关切换方案&#xff1a;传统开关切换策略 第一次比较阶段&#xff1a;如果VP(1)-VN(1)<0 第一次比较阶段&#xff1a;如果VP(1)-VN…

Java开发工程师面试题(业务功能)

一、订单超时未支付自动关闭的几种实现方式。 定时任务扫描&#xff1a;在订单创建时&#xff0c;为订单创建一个定时任务&#xff0c;并设置一个超时时间。后端服务器会定期检查任务的创建时间是否超过了超时时间。如果是&#xff0c;则将订单设置为关闭状态。这种方案需要后…

Metaspace

1、什么是 Metaspace Metaspace 区域位于堆外&#xff0c;所以它的最大内存大小取决于系统内存&#xff0c;而不是堆大小&#xff0c;我们可以指定 MaxMetaspaceSize 参数来限定它的最大内存。 Metaspace 是用来存放 class metadata 的&#xff0c;class metadata 用于记录一…

社区店选址案例研究:成功与失败的经验教训

大家好&#xff0c;我是一名鲜奶吧5年的创业者&#xff0c;在社区店经营方面有着丰富的经验。 今天&#xff0c;我将分享一些关于社区店选址的成功与失败案例&#xff0c;希望能给想开实体店或创业的朋友们提供有价值的干货信息。 首先&#xff0c;让我们来看看成功的社区店选…

【MobaXterm】Execute command 的问题;Linux环境变量配置;

引言 记录一次使用MobaXterm工具连接数据库时出现的问题。 现象是这样的&#xff1a;通过MobaXterm使用账户A以SSH方式连接登录测试服务器&#xff0c;尝试重启服务。服务启动时提示JDK版本不一致&#xff1a;Unsupported major.minor version 52.0 查询一下java版本 开发环境…

抖音详情API:高效利用缓存机制提升性能

抖音详情API的具体实现细节和参数并不是公开透明的&#xff0c;因为这些信息属于抖音平台的内部API&#xff0c;通常只对合作伙伴或官方开发者开放。因此&#xff0c;我无法为你提供关于抖音详情API的具体代码或参数细节。 然而&#xff0c;关于高效利用缓存机制提升性能的一般…

RedShift 授权操作

RedShift 中只能有一个数据库&#xff0c;是在创建 RedShift 的时候创建的&#xff1b;SCHEMA 是 RedShift 中的模式&#xff0c;可以将 SCHEMA 理解为 MySQL 中的 DATABASES&#xff0c;授权也是针对 SCHEMA 去授权的。 注意&#xff1a; RedShift 中创建的用户默认是有超级管…

安卓面试题 11-20

&#x1f525; 11、 解释一下那个Kotlin 代码有什么问题&#xff1f; &#x1f525; 为什么这段代码是错误的&#xff1f;class Student (var name: String) {init() {println("Student has got a name as $name")}constructor(sectionName: String, var id: Int) t…

当CV遇上transformer(一)ViT模型

当CV遇上transformer(一)ViT模型 我们知道计算机视觉(Computer Vision)&#xff0c;主要包括图像分类、目标检测、图像分割等子任务。 自AlexNet被提出以来&#xff0c;CNN成为了计算机视觉领域的主流架构。CNN网络结构主要由卷积层、池化层以及全连接层3部分组成&#xff0c;其…

LeetCode 2575.找出字符串的可整除数组:同余问题

【LetMeFly】2575.找出字符串的可整除数组&#xff1a;同余问题 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-the-divisibility-array-of-a-string/ 给你一个下标从 0 开始的字符串 word &#xff0c;长度为 n &#xff0c;由从 0 到 9 的数字组成。另给你一…

YoloV7改进策略:Block改进|MogaNet——高效的多阶门控聚合网络

文章目录 摘要论文:《MogaNet——高效的多阶门控聚合网络》1、简介2、相关工作2.1、视觉Transformers2.2、ViT时代的卷积网络3、从多阶博弈论交互的角度看表示瓶颈4、方法论4.1、MogaNet概述4.2、多阶门控聚合4.3、通过通道聚合进行多阶特征重新分配4.4、实现细节5、实验5.1、…

AttributeError: ‘ChatGLMTokenizer‘ object has no attribute ‘sp_tokenizer‘

目录 问题描述 在使用ChatGLMlora微调的时候&#xff0c;报错“AttributeError: ChatGLMTokenizer object has no attribute sp_tokenizer“ ​编辑问题解决&#xff1a; 问题描述 在使用ChatGLMlora微调的时候&#xff0c;报错“AttributeError: ChatGLMTokenizer object h…

使用nginx输入端口号显示404

输入对应的端口号显示404 先检查当前nginx文件夹的路径是没有中文的查看是否没有开启nginx&#xff1a;ctrlaltdelete打开任务管理器&#xff0c;看看有没有nginx.exe进程&#xff08;一般是有两个进程&#xff09;如果没有进程说明没有打开nginx&#xff0c;查看端口号是否被…

Vue快速开发一个主页

前言 这里讲述我们如何快速利用Vue脚手架快速搭建一个主页。 页面布局 el-container / el-header / el-aside / el-main&#xff1a;https://element.eleme.cn/#/zh-CN/component/container <el-container><el-header style"background-color: #4c535a"…

SystemVerilog构造、包

包 包提供了一种共享不同构造的附加方式。他们的行为与VHDL包。包可以包含函数、任务、类型和枚举。的语法包是&#xff1a; package package_name; items endpackage : package_name 最终的package_name不是必需的&#xff0c;但它使代码更易于阅读。包是import命令在其他…

「Mybatis深入四」:插入数据后返回主键

一、需求 向数据库插入一条记录后&#xff0c;希望能立即拿到这条记录在数据库中的主键值。 二、代码演示 1、方式1 - useGeneratedKeys 数据库环境 CREATE DATABASE mybatis_db; USE mybatis_db; CREATE TABLE user (id INT(11) NOT NULL AUTO_INCREMENT,username VARCHAR(…

2024.3.7

大端存储&#xff1a;高存低&#xff0c;低存高&#xff1b; 小端存储&#xff1a;高存高&#xff0c;低存低&#xff1b; sizeof 用于获取数据类型或变量的大小&#xff0c;strlen 用于获取字符串的长度。 不能改变常量字符串&#xff0c; char *arr"hello"; *ar…

路径解析(ccf 201604-3)解题思路

问题描述   在操作系统中&#xff0c;数据通常以文件的形式存储在文件系统中。文件系统一般采用层次化的组织形式&#xff0c;由目录&#xff08;或者文件夹&#xff09;和文件构成&#xff0c;形成一棵树的形状。文件有内容&#xff0c;用于存储数据。目录是容器&#xff0c…