String 类是引用类型,是不可变的。
举例:
String str1 = “Hello”;
String str2 = str1;
但是如果“修改”str1 的值str2 不会随之变化。
public class Demo1 {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = str1;
str1 = "World";
System.out.println(str1);
System.out.println(str2);
}
}
没有“修改”str1 之前,内存中是:
“修改”之后变成:
所以严格来说,str1 = “World” 并不是“修改”了字符串而是将str1 指向了一个新的对象,所以String 是不可变的。
String str = “hello”;
str = “H” + str.subString(1);
System.out.println(str);
结果为:Hello
substring是String类的常见方法,可以看这篇https://blog.csdn.net/AlinaQ05/article/details/124376643
StringBuilder stringBuilder = new StringBuilder(“hello”);
stringBuilder.delete(0,1);
stringBuilder.insert(0,“H”);
System.out.println(stringBuilder);
结果为:Hello
StringBuilder类详细内容见这篇
https://blog.csdn.net/AlinaQ05/article/details/124380068
字符串常量池是在JVM底层上会自动维护的一个对象池。
使用场景:在采用了方式1(直接构造String的方式)将String 类的对象实例化,就将该实例化对象也就是创建的字符串自动保存在字符串常量池中。如果下次继续使用这种方式构造String,此时池中有该字符串,就直接引用,也就是直接返回该字符串的地址。如果没有就开辟新的字符串对象然后将其保存在字符串常量池中方便下次使用。
举例:
String str1 = “Hello World”;
String str2 = “Hello World”;
String str3 = “Hello World”;
str1 创建的Hello World 字符串加入到字符串常量池中,str2 和str 3 都是引用字符常量池中的字符串。
字符串常量池的优点:效率高,不用每一次都开辟新的空间,将字符串保存一次后,之后都可以直接从池中拿出来使用。
String str = new String(“Hello”);
缺点:
解决方法:手动将String对象加入字符串常量池
String str1 = new String("Hello").intern();
String str2 = "Hello";
System.out.println(str1==str2);
public class StringDemo1 {
//字符数组转字符串
public static String arrString(char[] data) {
String str = new String(data);
return str;
}
public static void main(String[] args) {
char[] data = new char[]{'h', 'e', 'l', 'l', 'o'};
System.out.println(arrString(data));
}
}
public class StringDemo1 {
//将部分字符数组转字符串
public static String arrString2(char[] data) {
String str = new String(data, 1, 4);
return str;
}
public static void main(String[] args) {
char[] data = new char[]{'h', 'e', 'l', 'l', 'o'};
System.out.println(arrString2(data));
}
}
结果:r
或者这种:
byte[ ] 和char[ ]:
byte[ ] 是把String 按照字节的方式处理,适用于网络传输时,存储数据。
char[ ] 是把String 按照字符的方式处理,适用于处理文本数据。
文章浏览阅读304次。参考ffmpeg常用命令ffmpeg参数中文详细解释[总结]FFMPEG视音频编解码零基础学习方法一、安装打开https://ffmpeg.zeranoe.com/builds/,该网站中的FFMPEG分为3个版本:Static,Shared,Dev。前两个版本可以直接在命令行中使用,他们的区别在于:Static里面只有3个应用程序:ffmpeg.exe,ffplay.exe..._fmpeg-4.2.1-win32-shared.zip
文章浏览阅读1w次,点赞3次,收藏4次。在Qtablewidget 展示的时候,有时候我们不希望表格的内容被篡改,于是我们可以设置表格的属性选中需要的设置的表格,然后在筛选框中输入edit如下图所示勾选NoEditTriggers就好了_如何qt的ui界面,使得别人无法修改
文章浏览阅读59次。题解:水题从左向右维护以每一个作为右端点的最大值线段树维护代码:#include <bits/stdc++.h>using namespace std;#define rint register ll#define IL inline#define rep(i,h,t) for (rint i=h;i<=t;i++)#define..._从左向右维护以每一个作为右端点的最大值 设记录第 i 天的电影下次播放时间 枚举
文章浏览阅读448次。Linux用户管理用户基本概念什么是用户用户指的是能够正常登录Linux或Windows系统,比如:登录QQ的用户、登入王者荣耀的用户、等等[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nz1edsjq-1626145230283)(C:\Users\李开开\AppData\Roaming\Typora\typora-user-images\image-20210712171546940.png)]为什么需要用户系统上的每一个进程(运行的程序),都_linux登录qq是什么意思
文章浏览阅读4.5k次,点赞4次,收藏7次。最近用Animator获取状态各种获取错误,所以记一下笔记Animator中可以获取三种不同的状态:GetCurrentAnimatorStateInfo 获取正确的状态机状态GetNextAnimatorStateInfo 获取下一个状态机的状态GetAnimatorTransitionInfo 获取状态机的过渡状态动画同步是在帧最前,而协程是在帧的最后调用。所以切换状态后在协程获取状..._getanimatortransitioninfo
文章浏览阅读924次。\bibliography{report} % bibliography data in report.bib\bibliographystyle{unsrt} % makes bibtex use spphys.bstunsrt 表示按照引用的先后顺序进行排序_spphys.bst
文章浏览阅读3.3k次。git撤销本地所有修改 git checkout ._git 回退所有的修改
文章浏览阅读100次。摘要:Enrolling devices with a clearinghouse server for Internet telephony and multimedia communications. Enrollment can be the process of taking a network device (such as a router, gateway, gatekeeper, ...
文章浏览阅读202次。本节书摘来自异步社区《iOS 9 开发指南》一书中的第1章,第1.3节工欲善其事,必先利其器——搭建开发环境,作者 管蕾,更多章节内容可以访问云栖社区“异步社区”公众号查看1.3 工欲善其事,必先利其器——搭建开发环境iOS 9 开发指南图片 2 知识点讲解:光盘:视频知识点第1章搭建开发环境.mp4学习iOS 9开发也离不开好的开发工具的帮助,如果使..._(1)下载完成后单击打开下载的“.dmg”格式文件,然后双击xcode文件开始安装。
文章浏览阅读115次。开发四年只会写业务代码,分布式高并发都不会还做程序员? iView 3.3.2 发布了,iView 是一套基于 Vue..._iview 3.2.2
文章浏览阅读93次。2019独角兽企业重金招聘Python工程师标准>>> ..._predicate not in查询
文章浏览阅读4.7k次,点赞3次,收藏7次。SpringBoot整合Spring Data JPA、MySQL、Druid并使用Mockito实现单元测试_spring jpa mock