String s1 = "abc";
String s2 = new String("abc");
对于JAVA来讲 . 万事万物都是对象, 都是是封装形式的存在, 对于最基本的数据类型 也不例外 . 当然也包括String .
在JAVA中有一个单独的空间 叫做 常量池 . 常量池中 包含着 所有的 基本数据类型的常量.
String s1 = "abc"; 这句话中 . 只有一个 对象. 这个对象 并不是真的 String s1, 而是 指的 "abc"
String s1 = "abc"当这句话出现的时候 , JAVA 就会在常量池中寻找 char a char b char c 然后 把他们组合起来. 作为一个对象 封装给 s1 .
就形成了String s1 = "abc" 这句话
String s2 = new String("abc");这句话中的之所有有两个对象. 是因为第一个对象 . 是刚才讲的 "abc" 而第二个对象 就是 new出来的String s2 了.
因为 是new的 而不是 直接赋值. 所有 在内存中 开辟了新的空间 封装了新的对象.. 然后 把常量池中 的"abc"这个对象 封装起来 和s2连接上 画了一个等号 |