Java入门基础学习笔记45——String使用的注意事项

String使用时的注意事项:

1)String对象的内容不可改变,被称为不可变字符串对象。

Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared. 

字符串是不变的,他们的值在创建后是无法改变的,字符串缓冲区只是可变字符串,因为字符串对象是不可变的,所以可以共享他们。

一般常量池是在方法区,但是字符串常量池在Java8之后放在堆内存中。

字符串就是一种字符串数组,它的本质是一个数组,所以存的都是地址。

结论:每次试图改变字符串对象实际上是新产生了新的字符串对象了,变量每次都是指向了新的字符串对象,之前字符串对象的内容确实是没有改变的,因此说String的对象是不可变的。

“黑马”、“播妞”、“程序员”这些字符串对象的内容确实都没有改变。

1)直接赋值方式创建:只要是以“...”方式写出的字符串对象,会存储到字符串常量池中,且相同内容的字符串只存一份。

2)通过构造函数创建:但是通过new方式创建字符串对象,每new一次都会产生一个新的对象放在堆内存中。这个时候虽然内容相同,但是地址不同。

package cn.ensource.string;public class StringDemo3 {public static void main(String[] args) {// 目标:搞清楚String使用时的注意事项// String类型是不可改变的String name = "黑马";name += "程序员";name += "播妞";System.out.println(name);// 直接赋值方式String str1 = "changchunhua";String str2 = "changchunhua";System.out.println(str1 == str2);   // true// 通过构造函数方式创建char[] chars = {'a', 'b', 'c'};String a1 = new String(chars);String a2 = new String(chars);System.out.println(a1 == a2);   // false}
}

为什么要使用常量池呢?

是为了节省内存。可能量小,我们感觉不到,但是量大的话,效果就非常明显。

 阅读程序

这个结果是false。

非常经典的理解程序。

编译器确实帮我们做了编译优化。

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

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

相关文章

C++代码使用ClangCL编译注意事项

遇到cmake指定模板类工程使用msvc的clang编译器编译代码,代码变量出现与预期不符的问题; 如下: clangcl将实现放到头文件里则不会出现这样的情况; 最后按照pcl的模板类写法则解决这个问题;

[SCTF2019]Who is he

unity 游戏,直接输入字符串 直接修改 if 判断,看能不能直接输出flag 修改了程序逻辑,但还是输出了 明明已经把这个 if 删了 不知道为什么还会输出这串字符 应该程序还有什么引入吧,看 wp 应该先查一下程序的动态链接库 DLL 是…

瓦罗兰特账号怎么注册 瓦罗兰特延迟高用什么加速器

《瓦罗兰特》(Valorant)是由拳头游戏(Riot Games)开发并发行的一款免费的多人在线第一人称射击游戏(FPS),它结合了传统的硬核射击机制与英雄角色的能力系统,为玩家提供了独特的竞技体…

【加密与解密(第四版)】第十七章笔记

第十七章 软件保护技术 17.1 防范算法求逆 17.2 抵御静态分析 反汇编算法:线性扫描(无法正确地将代码和数据分开)、递归进行 巧妙构造代码和数据,在指令流中插入很多“数据垃圾",干扰反汇编软件的判断&#xf…

为什么要学习c++?

你可能在想,“C?那不是上个时代的产物吗?” 哎呀,可别小看了这位“老将”,它在21世纪的科技舞台上依旧光芒万丈,是许多尖端技术不可或缺的基石! 1. 无可替代 c源于c语言,它贴近于硬…

地下停车场FM信号覆盖系统技术原理用与应用

随着我国城市化水平的快速推进与房地产的快速发展,城市停车场称为每栋建筑物的硬性配套建筑,尤其是商业综合体、医院、政府机关、机场、高铁站等场所出现了超大规模停车场,停放车辆可达数千辆,停车场的智能化与信息化水平也越来越…

Java | Leetcode Java题解之第104题二叉树的最大深度

题目&#xff1a; 题解&#xff1a; class Solution {public int maxDepth(TreeNode root) {if (root null) {return 0;}Queue<TreeNode> queue new LinkedList<TreeNode>();queue.offer(root);int ans 0;while (!queue.isEmpty()) {int size queue.size();wh…

Llama模型家族之使用 Supervised Fine-Tuning(SFT)微调预训练Llama 3 语言模型(十) 使用 LoRA 微调常见问题答疑

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

进程和用户管理

查看进程的命令 ps top pstree 发送信号命令 kill 使用是后加-l 用户管理命令 添加用户:sudo adduser 用户名 修改组:sudo usermod -G 用户名1 用户名2 修改家目录:sudo usermod -d /home/用户名 -m 用户名 删除用户名:sudo deluser --remove -home 用户名

Docker 快速搭建 MongoDB 4.x 集群(一主一从)

目录 1. 生成 mongo-file2. 启动主节点3. 启动从节点4. 配置副本集5. 注意事项 环境&#xff1a;MongoDB 4.0.25&#xff0c;Alma Linux&#xff08;建议使用 Linux&#xff09; 部署的时候是在同一个及其上操作的&#xff0c;实际可以放在不同机器上。 截止到 2024年05月&…

JAVA学习·String类的常用方法

String 类及其创建 String 类的创建 String 类是 Java 内置的一个类&#xff0c;其完全限定类名是java.lang.String。想要创建一个字符串有多重方式&#xff0c;比如创建字符串"Hello"&#xff1a; String s1 "Hello"; // 字面量创建 String s2 new St…

在组件外使用pinia的坑

来源 项目包含很多静态的类型&#xff0c;我新建了一个js来专门管理和使用这些类型&#xff0c;如下图这种&#xff0c;有一部分是固定的&#xff0c;千年不变&#xff0c;有一部分是偶尔会变&#xff08;需要后台获取&#xff09;&#xff0c;还有一部分是要登录后才能拿到的…

python PyQt5 数字时钟程序

效果图&#xff1a; 概述 本文档将指导您如何使用Python的PyQt5库创建一个简单的时钟程序。该程序将显示当前时间&#xff0c;并具有以下特性&#xff1a; 始终在最前台显示。窗口可拖动。鼠标右键点击窗口可弹出退出菜单。时间标签具有红色渐变效果。窗口初始化时出现在屏幕…

骨折分类数据集1129张10类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;1129 分类类别数&#xff1a;10 类别名称:["avulsion_fracture",…

鸿蒙OS开发:【一次开发,多端部署】(导航栏) 导航栏

一多导航栏 介绍 本示例展示了导航组件在不同设备形态下的样式。 在sm设备上&#xff0c;以tabs形式展示&#xff0c;内容、导航为上下样式布局&#xff0c;通过点击底部tabs切换内容&#xff1b;在md/lg设备上&#xff0c;以[SideBarContainer]形式展示&#xff0c;内容、导…

RocketMQ学习(1) 快速入门

mq的一些前置知识和概念知识可以看这篇文章——SpringCloud入门(3) RabbitMQ&#xff0c;比如常见mq的对比等等&#xff0c;这篇文章不再赘述。 目录 RocketMQ概念、安装与配置docker配置 RocketMQ快速入门**同步消息消费模式 **异步消息*单向消息**延迟消息*顺序消息批量消息事…

大工作量LUAD代谢重编程模型多组学(J Transl Med)

目录 1&#xff0c;单细胞早期、晚期和转移性 LUAD 的细胞动力学变化 2&#xff0c;细胞代谢重编程介导的LUAD驱动恶性转移的异质性 3&#xff0c;模型构建 S-MMR评分管线构建 4&#xff0c;S-MMR 模型的预后评估 5&#xff0c; 还开发了S-MMR 评分网络工具 6&#xff0c…

Windows 使用技巧

Windows 使用技巧 ①局域网内共享文件 ②CTRL Y 和 CTRL Z ①局域网内共享文件 第一步&#xff1a; 选择要共享的文件&#xff08;分享方操作&#xff09; 第二步&#xff1a; 右键打开属性&#xff0c;选择共享&#xff08;分享方操作&#xff09; 第三步&#xff1a; …

简单得阴影引导实现

效果如下: 实现方式&#xff1a; 1、引入三方库&#xff1a; implementation io.github.razerdp:BasePopup:3.2.0 2、代码实现 class NewUserGuide3Popup : BasePopupWindow {constructor(activity: Activity) : super(activity)constructor(context: Context) : super(con…

js检验一个字符串是否是正确时间格式的工具方法

js检验一个字符串是否是正确时间格式的工具方法 (()> {/*** 检验字符串是否为时间格式* param {String} date 需要检验的时间格式* returns true 为时间格式&#xff0c;false 为非时间格式*/const isTimaFormat (date) > {if(!date) return false;try{const tempTime …