- 字符串创建的三种方式:
- String str1 =“hello”;
- String str2=new String(“hello”);
- char[] value = {‘h’,‘e’,‘l’,‘l’,‘o’};
String str3=new String(value);
三种创建方式在内存中开辟的空间是不一样的,每次new一个对象,就会在内存中开辟一个空间;第一种方式是在堆上的字符串常量池放入"hello" ,str1引用该地址;而第二种构造String的方式,在底层是与第三种实现的方法是相同的,创建value[ ] 数组,然后指向‘hello’内容。 需要记得字符串常量不可更改,因为value数组是用final修饰的。
通常==
比较的是对象的地址是否一致,但是对于指向的内存的比较则用 ‘equals()
’ 函数实现。内容比较,equals先比较是否引用同一个对象,是的话返回True,不是的话将字符串转换为数组,遍历数组然后比较数组内容是否相等。
显然,str1,str2,str3,若用 '=='
来判断的话,答案都是false 。值得注意的是如下代码:
String str1=“hello”;
String str2=