String对象的创建与原理
创建方式
* 1.使用new关键字:String s1 = new String("abc");
* 2.直接指定:String s2 = "abc";
* 3.使用串联生成字符串:String s3 = "ab" + "c";
原理一:
使用任何方式创建字符串 s=x时,java运行时会在缓冲池中查找是否存在内容相同的字符串对象,存在则不在池中添加,直接 使用已有的,没有才在缓冲池中创建x.
原理二:
使用new关键字创建时,不管池中、堆栈中是否已有,一定会在堆或栈创建一个新的对象.
原理三:
使用直接指定或串联方式创建时,仅仅会维护缓冲池中的字符串:有则用已有的,没有才创建新的;但绝不会在堆栈中再创建.
原理四:
使用包含变量的表达式来创建String对象,则不仅会检查维护String池,而且还会在堆栈区创建一个String对象.
举个实例
String s1 = "linbizhao";
String s2 = "linbizhao";
System.out.println(s1==s2); //true
System.out.println(s1.equals(s2)); //true
原理:(不会创建堆)
String s3 = new String("linbizhao");
String s4 = new String("linbizaho");
System.out.println(s3==s4); //false
System.out.println(s3.equals(s4)); //false
原理:(创建堆)