一、创建String(字符串对象)的两种方式
1、String str1 = "nihao"("nihao"值存储在常量值中)
2、String str2 = new String("“nihao")(在堆内存中建立一个对象)
二、jvm
1、java虚拟机,用来解释并执行java程序的应用软件。
2、有两种方式给字符串对象分配内存:
1、将字符串常量存储在方法区中(String str1 = "nihao"),在内存中只有一个对象,虚拟机启动时就已经存储在方法区的常量值中。
2、在堆内存中建立一个对象,在内存中有两个对象,在堆内存中开辟了一个空间,空间当中通过函数来初始化,然后向构造函数中传入创建的字符串对象,传入的时候其实是字符串地址的引用,所以常量值中有一个"nihao",堆内存中有一个”new String()“。
![](C:/Users/Administrator/AppData/Local/YNote/data/qq1B24848CE87990935C878F1C1C4029C4/31d9edf295c34d0aa69acd1f2be0fb8c/clipboard.png)
![](https://images2018.cnblogs.com/blog/1466820/201808/1466820-20180816150654246-711565378.png)
三、字符串对象的特点:字符串是一个常量,如果被初始化后几乎不会被改变。按照如下图理解这句话:
![](https://images2018.cnblogs.com/blog/1466820/201808/1466820-20180816150733901-913459912.png)
![](C:/Users/Administrator/AppData/Local/YNote/data/qq1B24848CE87990935C878F1C1C4029C4/48da7a9d0e404395ae999e7a2b49ec4a/clipboard.png)
四、“==”和“.equal”二者均为用于比较时的区别:
![](C:/Users/Administrator/AppData/Local/YNote/data/qq1B24848CE87990935C878F1C1C4029C4/28f0e2e9d05f4166b1f3140cc508e28f/clipboard.png)
![](https://images2018.cnblogs.com/blog/1466820/201808/1466820-20180816150816797-1996481551.png)
![](https://images2018.cnblogs.com/blog/1466820/201808/1466820-20180816150839164-577181531.png)
![](https://images2018.cnblogs.com/blog/1466820/201808/1466820-20180816150856379-425566535.png)