java必须知道的3个String的问题
今天看了一个帖子感觉挺不错的,想总结一下。
String声明问题
String str = "Hello Java!".这句话是指我们声明了一个可以指向任何String类型数据的引用变量str。str此时指向的是内存中的一个匿名对象"Hello Java!",而不是声明了一个对象。这就是为什么我们再声明一个引用变量:String str1 = "Hello Java"时。str == str1的结果是true .如果是String str2 = new Sting(“Hello Java!”);的话,str == str2的结果是false。因为引用类型比较的是地址,而str 和str1 保存的都是同一个地址。
“==”和”equal”的区别
==比较的是两者的值是否相等,引用变量的值是一个地址。所以引用变量比较的是两个地址,如果想要比较两个引用类型的内容是否相等必须使用equal(Object object)方法。
因为在Object类中equal()方法是这样写的:
boolean equals(Object o){
return this==o;
}
所以,如果你自己写的类不重写equal()方法的话,equal()方法的作用等同于“==”。
String的不可变问题
String类型是不可变的,如:
String str =“a”;
String str1 =str+“b”;
这时在内存中字符串“a”并没有改变,而是在内存申请了一个新的字符串内容是“ab”。
所以会大量占用内存,所以出现了StringBuffer类可以实现可以增长的字符串功能,节省内存。