1.字符串常量池
字符串常量池是把经常用到的数据存放到内存中,避免频繁的数据创建和销毁,实现数据的共享,提高系统的性能
内存情况:虚拟机首先在常量池中查找该字符串是否存在,如果已经存在,则返回该引用,如果不存在,则在字符串常量池中创建该字符串对象,然后到字符串常量池中注册该字符串
当我们用new关键字创建字符串常量的时候,会先在堆内存中开辟一段内存空间,然后该内存会用来存储字符串常量的地址
2.==和equals的区别
基本数据类型==比较的是它的值
引用数据类型
当用==比较的时候,比较的是它们在内存中存放的地址,只有同一个new出来的对象才是true
Java所有类都继承了Object这个基类,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地址,但在一些库中这些方法被覆盖掉了,比如String,Interger,Date在这些类中equals不是比较堆中的地址了,而是有它自己的含义
String中的equals方法
1.首先比较两个字符串的地址是否相同,如果相同返回true
2.如果字符串地址不同,首先判断是否属于String,如果是再比较里面的内容是否相同
3.字符串拼接
用“+”进行字符串拼接的时候,我们调用的是StringBulider的两个方法append和toString方法。使用append进行拼接,虚拟机调用StringBuilder的toString()方法输出字符串,将该值存至s4
拼接好的字符串是以什么形式传递给s4,toString方法中 new String
在java当中,String提供的方法,一般都是重新new 一个对象

本文主要探讨Java中的字符串,涉及字符串常量池的工作原理、`==`与`equals`的区别、String类中的equals方法实现、字符串拼接的内部机制、不可变字符串的特性以及空串和Null串的差异。同时,列举并解释了多个常用的String API,如length()、charAt()、indexOf()、endsWith()等。
最低0.47元/天 解锁文章
2287

被折叠的 条评论
为什么被折叠?



