1 == 运算符
用来判断两个对象的引用地址是否相等
2 equals方法
用来判断两个对象的值(内容)是否相等
3 String在使用匿名对象字符串或初始化赋值字符串引用变量时会采用对象池策略,相同内容的字符串,会共用同一段堆内存
4 String在new实例化方式创建字符串对象时会开辟不同的堆内存存储字符串内容,即便是相同的内容。
5 字符串的内容平不可改变,即便是对一个字符串变量赋予新的内容,但是与此同时也智慧开辟新的堆内存空间来存储,并不会改变原来的堆内存空间的内容。而短时间内JVM还来不及回收前面所创造的垃圾内存空间,这可能会造成不好的影响。
下面的例子是对以上的内容的:
StringDemo.java
package test.string; public class StringDemo { public static void main(String[] args) { // TODO Auto-generated method stub boolean b11 = false; boolean b12 = false; boolean b21 = false; boolean b22 = false; boolean b31 = false; boolean b32 = false; boolean b41 = false; boolean b42 = false; if ("hello"=="hello"){ b11 = true; } if("hello".equals("hello")){ b12 = true; } System.out.println(b11);//true System.out.println(b12);//true //=================================== String str1 = "Hello"; String str2 = "Hello"; if(str1 == str2){ b21 = true; } if(str1.equals(str2)){ b22 = true; } System.out.println(b21);//true System.out.println(b22);//true //================================== String str3 = "Hello"; String str4 = new String("Hello"); String str5 = new String("Hello"); if(str3 == str4){ b31 = true; } if(str3.equals(str4)){ b32 = true; } if(str5 == str4){ b41 = true; } if(str5.equals(str4)){ b42 = true; } System.out.println(b31);//false System.out.println(b32);//true System.out.println(b41);//false System.out.println(b42);//true //================================== String str = "hello "; str = str + "world"; System.out.println(str);//hello world, generate two heap memories } }
时间: 2024-11-09 10:33:09