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