String是一个非常常用的类,应该深入的去了解String
如:
String str =new String("abc")
String str1 = "abc"
System.out.println(str == str1)
System.out.println(str.equal(str1))
结果:
false
true
原因解析:
Java运行环境有一个字符串池,由String类维护。
1. 执行语句String str=“abc”;时。首先查看字符串池中是否存在字符串"abc",如果存在则直接将“abc”赋给str,如果不存在则先在 字 符串池中新建一个字符串"abc",然后再将其赋给str.
2. 执行语句String str = new String(“abc”);时。不管字符串池中是否存在字符串“abc”,直接新建一个字符串“abc”,(注意,新建的字符串“abc”不是在字符串池中), 然后将其赋给str。由此可见 1.的效率要高于2的效率。
String str1="java";//指向字符串池
String str2="blog";//指向字符串池
String s = str1+str2;
+运算符会在堆中建立起两个String对象,这两个对象的值分别是“java”,“blog”,也就是说从字符串常量池中复制这两个值,然后再堆中创建两个对象。然后再建立对象s,然后将“javablog”的堆地址赋给s. 这句话共创建了3个String对象。
System.