之前跟着小编学习了数据类型有两个分类,一个为基本数据类型,另外引用数据类型(自定义类型)
现在学习引用数据类型中特别重要的String类
String类用于声明字符串
之前讲的基本数据类型只有一种赋值方式-直接赋值。而该类除此之外还可以使用构造方法(通过创建String类对象)对其实例化。
![](https://img-blog.csdn.net/20170308183743582?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdqaWU4MDgw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
那有人肯定认为图中的a1肯定就是a了只不过是换了名字内容都一样。
从表面上看来输出结果的确都一样但是实质有很大区别。从两种赋值方法上说起。
![](https://img-blog.csdn.net/20170308183908895?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdqaWU4MDgw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
1、直接赋值会出现常量池数据共享。
定义变量是申请存储数据的空间,如图定义变量a并直接赋值“1”,这时就有了地方中的一个空间存着“1”,这个地方叫常量池,这个空间有个地址,则这个地址指向变量名a。当给b赋值时,JVM会在常量池先寻找新数据是否存在,如果存在直接把数据所在空间地址,指向变量名b,不存在则会创建新的空间存放新数据,并新数据的地址指向变量名b。
2、使用构造方法创建对象进行实例化,每new一次就会创建一次对象。
每创建一次对象意味着就会为创建的对象开辟新的存储空间,说明就不会出现常量池共享。
现在学习引用数据类型中特别重要的String类
String类用于声明字符串
之前讲的基本数据类型只有一种赋值方式-直接赋值。而该类除此之外还可以使用构造方法(通过创建String类对象)对其实例化。
那有人肯定认为图中的a1肯定就是a了只不过是换了名字内容都一样。
从表面上看来输出结果的确都一样但是实质有很大区别。从两种赋值方法上说起。
1、直接赋值会出现常量池数据共享。
定义变量是申请存储数据的空间,如图定义变量a并直接赋值“1”,这时就有了地方中的一个空间存着“1”,这个地方叫常量池,这个空间有个地址,则这个地址指向变量名a。当给b赋值时,JVM会在常量池先寻找新数据是否存在,如果存在直接把数据所在空间地址,指向变量名b,不存在则会创建新的空间存放新数据,并新数据的地址指向变量名b。
2、使用构造方法创建对象进行实例化,每new一次就会创建一次对象。
每创建一次对象意味着就会为创建的对象开辟新的存储空间,说明就不会出现常量池共享。
这里有两个方法要重点说一下