String类的基本特点

xiaoxiao2021-02-28  136

String str1 = "hello"; String str2 = "hello"; System.out.println(str1 == str2); 输出为ture。 String str1 = "hello"; String str2 = new String("hello"); System.out.println(str1 == str2); 此时输出的是false,原因是此时比较的为str1和str2的地址,要想使结果为ture,使用str1.equals(str2)比较字符串相等函数。 String类中“==” 和equals()的比较: “==”进行的是数值比较,比较的是两个字符串的地址的数值; equals()进行的是字符串内容的比较。 字符串为匿名对象: String str1 = "hello"; 其实是将一个匿名的String类对象设置有名字,匿名对象存放在堆内存中。 任何一个字符串常量均为String类的一个匿名对象,所以该对象永远不可能为null。 String类的两种实例化: 1. 采用直接赋值: 在jvm底层会自动维护一个对象池(可以理解为对象数组),若采用直接赋值的操作,那么该实例化对象(字符串)将自动保存到对象池中,如果下次继续使用直接赋值声明了String类对象,那么如果此时对象池之中存在指定内容,则直接进行引用,若没有,则开辟新的字符串对象,然后将其保存在新的对象池之中以供下次使用。 2.采用构造方法:String str = new string("hello"); 如果使用构造方法则会开辟两块堆内存空间,而且有一块会成为垃圾,且对字符串共享产生影响。 String类中对象两种实例化的区别: 1.直接赋值只会开辟一块堆内存空间,且字符串对象可以保存在对象池中以供下次使用; 2.采用构造方法会开辟两块堆内存空间,使用intern()方法后可以手工入池。 所有的语言对于字符串的底层实现都是通过字符数组实现的,所以字符串常量不可改变。我们所见的字符串的变更,是字符串对象的变更。
转载请注明原文地址: https://www.6miu.com/read-18545.html

最新回复(0)