
在IDEA调试字符串实验的时候发现很多同学只会调用API不懂String底层。期末考试、面试最爱问String为什么不可变两种创建字符串方式区别可以直接在IDEA打断点一步步观察内存变化方便理解底层原理。1. 两种创建字符串方式String s1 abc; // 常量池String s2 new String(abc); //堆常量池String s1abc优先去字符串常量池查找存在直接复用不存在新建。• new String()一定在堆中创建对象会去常量池引用字符串。2. String不可变性String底层是private final char[] valuejdk1.8• final修饰数组引用数组地址不能变。• 一旦字符串创建字符内容不能修改。我们写str xxx不是修改原字符串而是新建字符串对象旧对象变成垃圾。IDEA断点调试可以观察每次拼接后变量引用地址发生改变。3. 实验中用到的String方法复习方法作用length()获取字符串长度charAt(i)获取下标i字符indexOf(c)查找字符第一次出现位置lastIndexOf(c)查找字符最后一次出现位置substring(start,end)截取子串contains(str)判断是否包含子串4. 配套小实验随机字符提取import java.util.Random;public class RandomCharPicker {public static void main(String[] args) {String source ABCDEFGhijklmn1234567;Random random new Random();int index random.nextInt(source.length());char ch source.charAt(index);System.out.println(随机取出字符ch);}}代码功能从给定字符串随机取出一个字符结合Random随机类直接粘贴进IDEA运行。5. 高频考题问String s1a; String s2a; s1s2 ?答true常量池复用。问String s1new String(a);String s2new String(a); s1s2?答false两个不同堆对象。总结1. String不可变底层final字符数组。2. 双引号创建放入常量池new一定在堆创建对象。3. indexOf、substring、charAt是开发最常用API。IDEA调试小技巧断点计算表达式可以直接对比两个字符串引用地址。结尾Java字符串是基础重点实验、期末、面试必考收藏起来复习。代码直接复制到IDEA即可运行。需要我再给每篇配上CSDN的摘要吗就是发布页面那个简介框。