String s1="abc";
String s2=new String("abc")
String 变量和其他变量不同 他不是在堆,栈之中分配内存的 他是在一个常量池的内存中分配
首先String s1="abc"; jvm会去查看在常量池中是否存在一个为“abc”的字符串,有的话,直接把“abc”的地址返回给s1引用,
而 String s2=new String("abc");
首先在堆内存中 分配了一块内存 然后内存存放的是 在常量池中“abc”的地址
毕老师的视频说两者的区别就是前者指创建一个对象,后者创建了两个对象
如果我们System.out.println(s1==s2); 返回值是false
因为一个指向堆内存地址 一个指向常量池中存放字符串的地址
但如果s1.equals(s2);那么返回就是true
这就是毕老师所说的s1值创建了一个对象,而s2创建了两个对象
|